web-dev-qa-db-fra.com

Parcelable où / quand est décritContents () utilisé?

Est-ce que quelqu'un sait où/quand cette méthode de Parcelable est appelée?

@Override
public int describeContents() {
  return 0;
}

Elle doit être annulée. Mais devrais-je envisager d'en faire quelque chose d'utile?

90
cody

Il existe une constante définie dans Parcelable appelée CONTENTS_FILE_DESCRIPTOR Qui est destinée à être utilisée dans describeContents() pour créer la valeur de retour du masque de bits.

La description de CONTENTS_FILE_DESCRIPTOR Dans ref API est:

Masques de bits à utiliser avec describeContents (): chaque bit représente un type d'objet considéré comme ayant une signification particulière potentielle lorsqu'il est organisé.

Ce qui signifie vraiment: si vous devez mettre un objet FileDescriptor dans Parcelable, vous devez/devez spécifier CONTENTS_FILE_DESCRIPTOR Comme valeur de retour de describeContents (), c'est-à-dire par " spécial object "(dans la description de describeContents()) cela signifie vraiment: FileDescriptor.

Cette fonctionnalité parcelable semble inachevée (lire: a une mauvaise conception). Il y a une autre chose étrange dans les documents:

Les classes implémentant l'interface Parcelable doivent également avoir un champ statique appelé CREATOR, qui est un objet implémentant l'interface Parcelable.Creator

Mettre en œuvre l'héritage multiple par des règles définies sous une forme lisible par l'homme? :-)

Il semble que le programmeur C++ ait conçu Parceable et à un moment donné, il a réalisé: Oh, putain, il n'y a pas d'héritage multiple en Java ... :-)

177
Ognyan

Il n'y a que deux valeurs possibles, 0 ou CONTENTS_FILE_DESCRIPTOR

si vous sérialisez POLO, cette valeur doit toujours être 0, CONTENTS_FILE_DESCRIPTOR est réservé à ParcelFileDescriptor , ce qui pourrait sérialiser un descripteur de fichier (FD) dans le système * unix.

4
bowman han