Android Parcelable and Serializable

丶灬走出姿态 提交于 2019-11-26 20:32:18

问题


So i know it is recommended to use Parcelable instead of Serializable in android, because it is faster.

My question is: is that impossible to avoid using Serializable right?

If I have a custom object i want to serialize, let's say I have the following class definition

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

Making this parcelable is easy, because the Person class contains the types parcel.write*() supports, i.e. there is parcel.writeString and parcel.writeInt

Now, what if the Person class is the following:

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

How am I suppose to parcel the MyCustomObj object?? It seems I need to use serializable again? but again, I thought it is SLOW to use serializable, and seems we have no choice but to use it in this case.

I don't understand

can someone tell me how I would parcel PersonTwo in this case?


回答1:


The link given by Ajay is the exact what you are looking for, how you can do it. Well, what you can do is implement Parcelable to your CustomObject1 and create a Parcelable class for it and then you can use that Parcelable class to Parcel it inside another Parcelable class that will Parcel both the 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());
    }
  ............
}



回答2:


You need to make MyCustomObj parcelable.




回答3:


All the composite objects should also be Parcelable. In case, you want to skip an object then don't use it writeToParcel method.




回答4:


I came to point where Parcelable is an issue for me. On Android 4.3, I am getting unmarhalling exception, when passing data between Activities as Parcelable. It works OK on Android 4.0, 4.2 or 4.4. It should work when changed to Serializable, even though, it is slower.



来源:https://stackoverflow.com/questions/9323044/android-parcelable-and-serializable

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!