Android Parcelable和Serializable

时间:2012-02-17 04:47:06

标签: android serialization android-intent parcelable parcel

所以我知道建议在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?

4 个答案:

答案 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时工作,即使它更慢。