Android可打包和可序列化

Android可打包和可序列化,android,serialization,android-intent,parcelable,parcel,Android,Serialization,Android Intent,Parcelable,Parcel,所以我知道建议在android中使用Parcelable而不是Serializable,因为它速度更快 我的问题是:这是不可能避免使用Serializable对吗 如果我有一个要序列化的自定义对象,假设我有以下类定义 public class Person { String name; int Age; ... .... } 使此parcelable很容易,因为Person类包含parcel.write*()支持的类型,即有parcel.writeString和parc

所以我知道建议在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对象?? 似乎我需要再次使用serializable?但是,我再次认为使用serializable很慢,似乎我们别无选择,只能在这种情况下使用它

我不明白


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

您需要使MyCustomObj可打包。

Ajay提供的链接正是您要查找的内容,您可以如何做到这一点。 好的,您可以做的是将
Parcelable
实现到您的
CustomObject1
并为其创建一个
Parcelable
类,然后您可以使用该
Parcelable
类将
Parcelable
类打包到另一个
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());
    }
  ............
}

我已经到了包裹对我来说是个问题的地步。 在安卓4.3上,当在两个服务器之间传递数据时,我遇到了一个反马氏异常 以包裹形式进行的活动。它可以在安卓4.0、4.2或4.4上正常工作。
当更改为可序列化时,它应该可以工作,即使速度较慢。

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

谢谢你,伙计,我会接受你和ajay作为答案,但似乎我只能选择一个。无论如何,谢谢你!!是的,这是现场和我如何做到这一点。只要让每个对象都是必需的,可以打包,因为最后根对象将包含原语或字符串类型。请添加一些代码,这样我们就可以检查问题是否出在android本身。我建议您使用Serializable。根据Nexus5上的测试,它比Parcelable快得多。看见要记住的主要一点是,Serializable仅在使用默认设置时速度较慢。如果使用手动序列化,则速度会快得多。查看上面的链接了解详细信息。