所以我知道建议在Android中使用Parcelable而不是Serializable,因为它更快。
我的问题是:使用Serializable是不可避免的吗?
如果我想要序列化的自定义对象,请假设我有以下类定义
public class Person {
String name;
int Age;
...
....
}
使这个parcelable很容易,因为Person类包含parcel.write *()支持的类型,即parcel.writeString和parcel.writeInt
现在,如果Person类如下:
public class PersonTwo {
MyCustomObj customObj;
String name;
int Age;
...
....
}
我怎么想包裹MyCustomObj对象? 看来我需要再次使用serializable吗?但同样,我认为使用serializable是慢的,似乎我们别无选择,只能在这种情况下使用它。
我不明白
有人可以告诉我在这种情况下我会如何包裹PersonTwo?
答案 0 :(得分:16)
Ajay提供的链接正是您所寻找的,您将如何做到。
那么,你可以做的是为你的Parcelable
实施CustomObject1
并为其创建一个Parcelable
类,然后你可以使用Parcelable
类来Parcel
它在另一个Parcelable
类中,它将包裹CustomObjects
。
public class CustomObject1 implements Parcelable {
// parcelable code CustomObject1
}
public class CustomObject2 implements Parcelable {
private CustomObject1 obj1;
// add CustomObject1 here with getter setter
// parcelable code for CustomObject2
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeParcelable(obj1, flags);
}
private void readFromParcel(Parcel in) {
obj1 = in.readParcelable(CustomObject1.class.getClassLoader());
}
............
}
答案 1 :(得分:2)
你需要让MyCustomObj可以分割。
答案 2 :(得分:0)
所有复合对象也应该是Parcelable。如果你想跳过一个对象,那就不要使用writeToParcel方法。
答案 3 :(得分:-1)
我认为Parcelable对我来说是一个问题。 在Android 4.3上,当我之间传递数据时,我得到了解组异常 活动为Parcelable。它在Android 4.0,4.2或4.4上运行正常。 它应该在更改为Serializable时工作,即使它更慢。