web-dev-qa-db-ja.com

Android Parcelable and Serializable

だから、AndroidではSerializableではなくParcelableを使用することをお勧めします。これは、高速であるためです。

私の質問は、Serializableの使用を避けることは不可能ですか?

シリアル化するカスタムオブジェクトがある場合、次のクラス定義があるとします

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

Personクラスにはparcel.write *()がサポートするタイプが含まれているため、このparcelableを作成するのは簡単です。つまり、parcel.writeStringとparcel.writeIntがあります。

ここで、Personクラスが次の場合はどうなりますか:

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

MyCustomObjオブジェクトをパーセルするにはどうすればよいですか?再びシリアライズ可能にする必要があるようです。しかし、再度、シリアライズ可能を使用するのは遅いと思い、この場合は使用する以外に選択肢がないようです。

わからない

誰かがこの場合にPersonTwoを小包する方法を教えてもらえますか?

30
user1118019

Ajayから提供されたリンクは、まさにあなたが探しているものであり、どのようにそれを行うことができます。さて、あなたができることは、ParcelableCustomObject1および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());
    }
  ............
}
16
Lalit Poptani

MyCustomObjをパーセル可能にする必要があります。

2

すべての複合オブジェクトもParcelableである必要があります。場合によっては、オブジェクトをスキップしたいので、writeToParcelメソッドを使用しないでください。

0
Shinoo Goyal