Je sais donc qu'il est recommandé d'utiliser Parcelable au lieu de Serializable dans Android, car c'est plus rapide.
Ma question est: est-il impossible d'éviter d'utiliser le droit sérialisable?
Si j'ai un objet personnalisé que je veux sérialiser, disons que j'ai la définition de classe suivante
public class Person {
String name;
int Age;
...
....
}
Il est facile de rendre cette parcelle, car la classe Person contient les types pris en charge par parcel.write * (), c'est-à-dire qu'il y a parcel.writeString et parcel.writeInt
Maintenant, que se passe-t-il si la classe Person est la suivante:
public class PersonTwo {
MyCustomObj customObj;
String name;
int Age;
...
....
}
Comment suis-je supposé répartir l'objet MyCustomObj ?? Il semble que je doive réutiliser sérialisable? mais encore une fois, je pensais qu'il est lent d'utiliser sérialisable, et semble que nous n'avons pas d'autre choix que de l'utiliser dans ce cas.
Je ne comprends pas
quelqu'un peut-il me dire comment je répartirais PersonTwo dans ce cas?
Le lien donné par Ajay est exactement ce que vous cherchez, comment vous pouvez le faire. Eh bien, ce que vous pouvez faire, c'est implémenter Parcelable
à votre CustomObject1
et créez une classe Parcelable
pour cela, puis vous pouvez utiliser cette classe Parcelable
pour Parcel
dans une autre classe Parcelable
qui répartira à la fois le 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());
}
............
}
Vous devez rendre MyCustomObj parcellable.
Tous les objets composites doivent également être parcellables. Dans le cas, vous souhaitez ignorer un objet, puis ne l'utilisez pas la méthode writeToParcel.