Android Parcelable和Serializable

所以我知道这是build议在Android中使用Parcelable而不是Serializable,因为它更快。

我的问题是:是不可能避免使用Serializable的权利?

如果我想要序列化一个自定义对象,让我们说我有以下的类定义

public class Person { String name; int Age; ... .... } 

使这个parcelable容易,因为Person类包含parcel.write *()支持的types,即有parcel.writeString和parcel.writeInt

现在,如果Person类如下:

 public class PersonTwo { MyCustomObj customObj; String name; int Age; ... .... } 

我想如何包裹MyCustomObj对象? 看来我需要再次使用序列化? 但是又一次,我认为这是使用序列化的SLOW,似乎我们别无select,只能在这种情况下使用它。

我不明白

有人可以告诉我,在这种情况下我将如何包裹PersonTwo?

Solutions Collecting From Web of "Android Parcelable和Serializable"

阿贾伊给出的链接是你正在寻找什么,你如何做到这一点。 那么,你可以做的是实现CustomObject1到你的CustomObject1并为它创build一个CustomObject1类,然后你可以使用CustomObjects类将Parcel CustomObjects在另一个CustomObjects类中,这个类将会Parcel两个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()); } ............ } 

你需要使MyCustomObj可以被识别。

所有的组合对象也应该是Parcelable。 如果你想跳过一个对象,那么不要使用writeToParcel方法。

我来指出Parcelable对我来说是一个问题。 在Android 4.3上,当在作为Parcelable的Activities之间传递数据时,我得到了unmarhallingexception。 它在Android 4.0,4.2或4.4上正常工作。 它应该工作时更改为可序列化,即使它比较慢。