Android Parcelable和Serializable

use*_*019 30 serialization android parcel parcelable android-intent

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

我的问题是:使用Serializable是不可避免的吗?

如果我有一个我想要序列化的自定义对象,那么假设我有以下类定义

public class Person {
   String name;
   int Age;
   ...
   ....
}
Run Code Online (Sandbox Code Playgroud)

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

现在,如果Person类如下:

public class PersonTwo {
   MyCustomObj customObj;
   String name;
   int Age;
   ...
   ....
}
Run Code Online (Sandbox Code Playgroud)

我怎么想包裹MyCustomObj对象?看来我需要再次使用serializable吗?但同样,我认为使用serializable是慢的,似乎我们别无选择,只能在这种情况下使用它.

我不明白

谁能告诉我在这种情况下我会如何包裹PersonTwo?

Lal*_*ani 16

Ajay给出的链接正是您所寻找的,如何做到这一点.好吧,你可以做的是实现Parcelable你的CustomObject1Parcelable为它创建一个类,然后你可以在另一个包含它的类中使用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());
    }
  ............
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢伙计,我会接受你和ajay作为答案,但似乎我只能选一个.反正谢谢!! (2认同)

Sof*_*LLC 2

您需要使 MyCustomObj 可打包。