2010-11-02 14 views
79

Qualcuno sa dove/quando viene chiamato questo metodo di Parcellizzabile?Parcelable where/when is describeContents() utilizzato?

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

Deve essere sovrascritto. Ma dovrei considerare di fare qualcosa di utile con esso?

+0

Sembra che nessuno abbia un'idea ..? : -/ – cody

risposta

158

C'è una costante definita in Parcelable denominata CONTENTS_FILE_DESCRIPTOR che deve essere utilizzata in describeContents() per creare il valore di ritorno maschera di bit.

Descrizione per CONTENTS_FILE_DESCRIPTOR nel API ref è:

maschere di bit per l'utilizzo con describeContents(): Ogni bit rappresenta una sorta di oggetto considerato di avere il potenziale significato speciale quando schierato.

che in realtà significa: se è necessario mettere FileDescriptor oggetto in Parcelable si dovrebbe/necessario specificare CONTENTS_FILE_DESCRIPTOR come valore di ritorno di describeContents(), cioè da "oggetto speciale" (in describeContents() 's descrizione) sono veramente significa: FileDescriptor.

Questa intera funzionalità Parcelable sembra incompiuta (leggi: ha un design scadente). C'è un'altra cosa strana nella documentazione:

classi che implementano l'interfaccia Parcelable deve anche avere un campo statico chiamato CREATORE, che è un oggetto che implementa l'interfaccia Parcelable.Creator

Implementare l'ereditarietà multipla da regole definite in forma leggibile dall'uomo? :-)

Sembra C++ programmatore progettato Parceable e ad un certo punto si rese conto: Oh, accidenti, non c'è ereditarietà multipla in Java ... :-)

+1

Grazie per questa spiegazione dettagliata. Ho trovato la tua risposta dopo essere stato frustrato da [questo tutorial] (http://www.app-solut.com/blog/2011/05/using-self-defined-parcelable-objects-during-an-android-aidl-rpc -ipc-call /) sostenendo che 'describeContents()' dovrebbe restituire 0 ogni volta che * "non ha nulla di speciale" *. Che in realtà non spiega nulla. La tua spiegazione è molto più chiara! – WebViewer

+0

cosa intendi per "inserire oggetto FileDescriptor in Parcelable", non capisco perché FileDescriptor non implementa l'interfaccia Parcelable. – Leo

+1

@LeoLink android.os.ParcelFileDescriptor – Ognyan

1

C'è solo due possibili valori, 0 o CONTENTS_FILE_DESCRIPTOR

se si sta serializzazione POLO, questo valore dovrebbe essere sempre 0, il CONTENTS_FILE_DESCRIPTOR è invertito per ParcelFileDescriptor, che potrebbe serializzare un descrittore di file (FD) nel sistema di * unix.

Problemi correlati