だから、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を小包する方法を教えてもらえますか?
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());
}
............
}
MyCustomObjをパーセル可能にする必要があります。
すべての複合オブジェクトもParcelableである必要があります。場合によっては、オブジェクトをスキップしたいので、writeToParcelメソッドを使用しないでください。