Domanda

Ho letto un sacco di post e articoli che esaltano la velocità di Parcelable sopra Serializable. Ho usato sia per un po 'per passare i dati tra le attività attraverso Intenti, e devono ancora notare alcuna differenza di velocità quando si passa tra i due. La quantità tipica dei dati devo trasferimento è da 5 a 15 oggetti nidificati da 2 a 5 campi ciascuna.

Dal momento che ho circa 30 lezioni che devono essere trasferibili, attuazione Parcelable richiede un sacco di codice standard che aggiunge i tempi di manutenzione. Una delle mie attuali esigenze è anche che il codice compilato deve essere il più piccolo possibile; Mi aspetto che avrei potuto risparmiare un po 'di spazio utilizzando Serializable sopra Parcelable.

uso Dovrei Parcelable o c'è alcun motivo per utilizzare più Serializable per tali piccole quantità di dati? O c'è un altro motivo per cui non dovrei usare Serializable?

È stato utile?

Soluzione

Per l'utilizzo in-memory, Parcelable è molto, molto meglio di quanto Serializable. Vi consiglio vivamente di non utilizzare Serializable.

Non è possibile utilizzare Parcelable per i dati che saranno memorizzati sul disco (perché non ha buone garanzie circa la coerenza dei dati quando le cose cambiano), tuttavia Serializable è abbastanza lento che io suggerisco vivamente non lo si utilizza neanche lì. Si sta meglio la scrittura dei dati stessi.

Inoltre, uno dei problemi di prestazioni con Serializable è che si finisce per far girare attraverso un sacco di oggetti temporanei, causando un sacco di attività GC nella vostra app. E 'abbastanza atroce. :}

Altri suggerimenti

Continuare a utilizzare la serializzazione. Vedrete un sacco di persone online che vi dirà che la serializzazione è molto lento e inefficiente. È corretto. Ma, una cosa che non vuole fare come programmatore di computer è prendere ogni commento sulle prestazioni come un assoluto.

Chiedetevi se la serializzazione sta rallentando il programma verso il basso. Non si nota quando si passa da un'attività all'altra? Hai notato quando salva / carichi? Se no, va bene. Non sarà possibile ottenere un ingombro minore quando si va a un sacco di codice serializzazione manuale, quindi non c'è alcun vantaggio c'è. Che importa se si tratta di 100 volte più lento rispetto a un'alternativa se 100 volte più lente mezzi 10ms invece di 0,1 ms? Tu non stai andando a vedere o, in modo che si prende cura? E, perché qualcuno dovrebbe investire sforzo enorme nella scrittura serializzazione manuale per 30 classi quando non farà alcuna differenza percepibile in termini di prestazioni?

Tutti afferma ciecamente che Parcelable è migliore e più veloce, rispetto Serializable, ma nessuno ha cercato di sostenere le sue affermazioni con eventuali prove. Ho deciso di provare questo me stesso e ho ottenuto risultati molto interessanti.

  

Solita serializzazione Java su un dispositivo Android media (se fatto bene) è di circa 3,6 volte più veloce di Parcelable per operazioni di scrittura e circa 1,6 volte più veloce per legge.

È possibile controllare il mio progetto di test qui: https://bitbucket.org/afrishman/androidserializationtest

Qualcuno ha considerato la serializzazione utilizzando JSON e passando i dati come una stringa? GSON e Jackson dovrebbero essere abbastanza efficiente per essere un concorrente di Parcelable così come serializzabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top