30

所以我知道建议在 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 对象?看来我需要再次使用可序列化?但同样,我认为使用可序列化是缓慢的,似乎我们别无选择,只能在这种情况下使用它。

我不明白

有人能告诉我在这种情况下我将如何包裹 PersonTwo 吗?

4

4 回答 4

16

Ajay 提供的链接正是您要查找的内容,以及如何执行此操作。好吧,您可以做的是实现Parcelable并为它CustomObject1创建一个Parcelable类,然后您可以在另一个类中使用Parcelable该类,该类将同时打包.ParcelParcelableCustomObjects

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());
    }
  ............
}
于 2012-02-17T05:35:16.670 回答
2

您需要使 MyCustomObj 可打包。

于 2012-02-17T05:12:42.653 回答
0

所有复合对象也应该是 Parcelable。如果您想跳过一个对象,请不要使用它的 writeToParcel 方法。

于 2017-06-09T08:48:33.110 回答
-1

我指出 Parcelable 对我来说是个问题。在 Android 4.3 上,当将活动之间的数据作为 Parcelable 传递时,我遇到了异常。它在 Android 4.0、4.2 或 4.4 上运行良好。当更改为可序列化时它应该可以工作,即使它更慢。

于 2014-02-24T10:44:23.607 回答