2012-08-16 8 views
5

Voglio migliorare le prestazioni della mia app. Una cosa che mi viene in mente è quella di sostituire tutti i parametri del pacchetto intent serializzabile con il parcelable.Vale la pena implementarlo per passare i dati tra le attività?

ho trovato questa discussione: Benefit of using Parcelable instead of serializing object

Ci

qualcuno afferma, da un libro, che Parcelable ha il solo ad essere utilizzato per la comunicazione tra processi? Probabilmente non è aggiornato più, giusto? Perché è, tecnicamente, almeno possibile.

Poi c'è anche la dichiarazione che Parcelable non è affidabile perché l'implementazione varia dispositivi attraversavano, questo sarebbe ovviamente una caratteristica uccidendo, perché voglio che funzioni sempre, tutti i dispositivi e le API, a partire dalle API 7.

E ho anche letto alcuni consigli sull'utilizzo di Externalizable o sull'implementazione di un protocollo personalizzato ... ma non capisco, perché Parcelable non è affidabile, perché gli sviluppatori Android fanno un tale ronzio su qualcosa che non funziona su tutti i dispositivi? O il commento non è vero?

Vale la pena implementare Parcelable? Mi blocco con Serializable? O è una serializzazione personalizzata/Externalizable l'approccio giusto?

Per favore non mi dica "basta provare", non ho tempo per questo, specialmente per controllare se Parcelable è affidabile (e dispositivi anche non abbastanza) ... l'esperienza è chiesto ...

Grazie.

P.S. Inoltre non ditemi "Serializable sarà accettabile per la maggior parte dei casi" Lo so, è effettivamente accettabile ma ho tempo e vorrei usarlo con Parcelable (o qualcos'altro), se questo migliora l'esperienza dell'utente.

risposta

5

Parcelable funziona sempre, tutto il tempo, su tutti i dispositivi. Se così non fosse, non funzionerebbe nulla. Gli interni Android fanno molto affidamento su Parcelable.

Parcelable sarà un po 'più efficiente di Serializable ma dubito seriamente che possa avere un grande impatto sulla "user experience" (a meno che, naturalmente, non lo si utilizzi ovunque e la serializzazione di oggetti molto grandi e complicati).

Se pensate di avere problemi di prestazioni, passerei il mio tempo disponibile a profilare l'applicazione e raccogliere dati empirici su dove sta spendendo il suo tempo. L'IMHO che sostituisce Serializable con Parcelable è un'ottimizzazione dell'implementazione relativamente di basso livello che probabilmente consente di ottenere un miglioramento delle prestazioni percepibile prossimo allo zero.

+0

Attualmente non sto riscontrando problemi di prestazioni, ho solo pensato che il passaggio dei parametri più veloce avrebbe reso lo switch dello schermo più veloce in modo che l'app si sentisse più leggera e veloce. Veloce e reattivo è qualcosa che considero molto importante per l'esperienza dell'utente. – Ixx

+0

Non sto passando enormi quantità di dati, ma anche non pochi primitivi ... Sto passando cose come user-object (1), con molti dati personali, o account, cose del genere. – Ixx

4

Qualcuno dichiara, da un libro, che il parcelable deve essere utilizzato solo per la comunicazione tra processi? Probabilmente non è aggiornato più, giusto? Perché è, tecnicamente, almeno possibile.

Se Parcelable non è stato pensato per essere passato tra le attività, perché esiste il metodo putExtra (String name, Parcelable value) Intent dal livello API 1?

Poi c'è anche la dichiarazione che Parcelable non è affidabile perché l'implementazione varia dispositivi attraversavano, questo sarebbe ovviamente una caratteristica uccidendo, perché voglio che funzioni sempre, tutti i dispositivi e le API, a partire da API 7.

Diamo la mia citazione della documentazione Parcel:

parcella non è un meccanismo di serializzazione general-purpose. Questa classe (e la corrispondente API Parcelable per il posizionamento di oggetti arbitrari in un pacchetto) è progettata come trasporto IPC ad alte prestazioni . Pertanto, non è appropriato inserire dati Pacco nella memoria permanente : le modifiche all'implementazione sottostante di uno qualsiasi dei dati nella particella possono rendere illeggibili i dati meno recenti.

Qui posso solo leggere un consiglio su non memorizzare i dati di un pacco nella memoria persistente. Dalla mia esperienza personale Parcelable non è mai stato un problema per il trasferimento di dati tra le attività. Uso intensamente e supporto API 8 all'API corrente.

Per quanto riguarda le prestazioni e la velocità, è stato stabilito che l'utilizzo di Parcelable è migliore, in quanto è un meccanismo di serializzazione del trasporto IPC ad alte prestazioni specifico per Android. Tuttavia, per vedere effettivamente un miglioramento, dovrebbe dipendere da quanto lo si utilizza.

+0

Bene, ho anche visto che è possibile passarlo, e anche averlo già testato, ma è stato confuso da quel thread -> "Cioè, il Parcelable non è pensato per essere passato a un'attività. Se vuoi iniziare un attività e passare alcuni dati, utilizzare un pacchetto. Parcelable è pensato per essere utilizzato solo come parte di una definizione AIDL. " E altri post che dicono che non è affidabile. Il pacchetto – Ixx

+0

fornisce anche un metodo putParcelable(). A proposito, Intents e Bundles sono un tipo di meccanismo IPC (Inter-Process Communication), quindi utilizzarli si adatta al modo in cui è progettato per Parcelable. –

+0

Sì, lo so, ma capisci che confonde una risposta accettata con 26 voti (e 100 taglie) che dice "Parcelable NON DEVE ESSERE PASSATO AD UN'ATTIVITÀ". Come detto, ho già provato questo e funziona, ma quel thread mi ha fatto dubitare. – Ixx