Android Parcelable 和 Serializable

Posted

技术标签:

【中文标题】Android Parcelable 和 Serializable【英文标题】:Android Parcelable and Serializable 【发布时间】:2012-03-08 13:05:32 【问题描述】:

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

【问题讨论】:

我建议你使用Serializable。根据对 Nexus 5 的测试,它比 Parcelable 快得多。见bitbucket.org/afrishman/androidserializationtest。要记住的主要事情是 Serializable 仅在默认设置下很慢。如果您使用手动序列化,它会快得多。详情请查看以上链接。 【参考方案1】:

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());
    
  ............

【讨论】:

谢谢老兄,我会接受你和 ajay 作为答案,但似乎我只能选择一个。无论如何,谢谢! 是的,这是正确的,我是如何做到的。只需使每个需要的对象都可以打包,因为最后,根对象将包含原始类型或字符串类型【参考方案2】:

您需要使 MyCustomObj 可打包。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

我指出 Parcelable 对我来说是个问题。 在 Android 4.3 上,当在 活动为 Parcelable。它在 Android 4.0、4.2 或 4.4 上运行良好。 更改为 Serializable 后它应该可以工作,尽管速度较慢。

【讨论】:

请添加一些代码,以便还可以检查问题是否出在 android 本身。

以上是关于Android Parcelable 和 Serializable的主要内容,如果未能解决你的问题,请参考以下文章

Android-Parcelable

Android中Serializable和Parcelable序列化对象详解

Android Parcelable和Serializable的区别

Android 中的 Parcelable 和继承

android中使用的Parcelable和Serialization有啥区别

Android Parcelable和Serializable的区别