2012-06-18 14 views
32

Voglio sapere esattamente,ciò che è la differenza tra Parcelable e serializzazione utilizzato in Android

  1. se devo utilizzato parcelable o serialization tecnica per l'invio di dati da un'attività ad altri?
  2. è obbligatorio per utilizzare uno di questi per l'invio di dati da uno all'altro?
  3. quando dovrei usarli?
  4. e la differenza esatta tra loro e le prestazioni di entrambi in aspetti Java.

Grazie in anticipo.


public class GetSetClass implements Serializable { 
    private int dt = 10; 

    /** pass any object, drwabale */ 
    public int getDt() { 
     return dt; 
    } 

    public void setDt(int dt) { 
     this.dt = dt; 
    } 
} 
+5

Ti è passare attraverso queste - http://stackoverflow.com/questions/3323074/android-difference-between-parcelable- e-serializzabile e http://stackoverflow.com/questions/5550670/benefit-of-using-parcelable-instead-of-serializing-object? – verisimilitude

+3

Usa lettere maiuscole per iniziare un nome di classe (_GetSetClass_ o _Getsetclass_). – keyser

+0

Qual è la necessità di serializzare oggetti in Android? potremmo non eseguire l'attività senza serializzare gli oggetti? – SRam

risposta

19

se dovrebbe ho usato la tecnica Parcelable o serializzazione per l'invio dei dati da un'attività all'altra.

Se si invia un tipo di dati non primitive/oggetto di un'altra attività attraverso la intent bisogna o Serialize o implementare Parcelable per quell'oggetto. La tecnica preferita è Parcelable poiché non influisce sulle prestazioni.

è obbligatorio utilizzare uno di questi per l'invio di dati da uno all'altro./quando dovrei usarli

È obbligatorio/utilizzato solo per inviare oggetti di dati di tipo non primitivo.

e la differenza esatta tra loro e le prestazioni di entrambi in aspetti Java.

La serializzazione influisce sulle prestazioni. Per maggiori dettagli controlla questo link Android Parcelable and Serializable

+0

@hi arun George, .. perché dovrei usare la serializzazione solo per il tipo di dati non primitivi? e perché è obbligatorio solo per il tipo dat non primitivo? – SRam

+2

I tipi di dati primitivi possono essere passati da un'attività a un'altra utilizzando 'intent.putExtras (String ID, PRIMITIVE_DATA_TYPE)' e accessibili nell'altra altra attività utilizzando l'equivalente getMethod() per quel tipo. Ma questo non è il caso per i tipi di dati definiti dall'utente e quindi è necessario utilizzare 'serializzazione' o' Parcelable'. –

+1

ok grazie per aver risposto a un'altra domanda ..quando dovremmo usare Bundle per l'invio di dati e che cosa è necessario mettere l'oggetto nell'intento del Bundle.putExtras (String ID, PRIMITIVE_DATA_TYPE) se usiamo la serializzazione per l'invio di dati .. – SRam

2

sia la parcellizzazione che la serializzazione sono modi per eseguire il marshall e dati unmarshal. in Android questo è usato per passare tipi di dati non primitivi tra componenti e processi. in generale, Android consente sia oggetti serializzabili che parcellari, quindi puoi scegliere il tuo metodo. l'eccezione è con le interfacce AIDL. gli oggetti devono essere ordinati per essere passati/restituiti.

serializzazione utilizza la riflessione per eseguire automaticamente il marshall e dati unmarshal. nella maggior parte dei casi l'implementazione dell'interfaccia marker è sufficiente per farlo funzionare. con parceling, devi scrivere il codice su marshall e unmarshal i dati tu stesso.

e quindi, ecco perché la parcellizzazione è più veloce. l'oggetto non ha bisogno di essere riflesso per scoprire i campi. è il riflesso che lo rende lento.

la serializzazione ha anche il controllo delle versioni incorporato ... se si tenta di eseguire unmarshal su una versione diversa della classe dell'oggetto che è stata sottoposta a marshalling, il processo avrà esito negativo in modo prevedibile. con la parcel, puoi fare la stessa cosa, ma devi implementarla tu stesso aggiungendo un "campo versione al tuo oggetto, e il codice che controlla la versione quando si rimuove la marmellata.

detto, di solito uso la serializzazione. con oggetti semplici non noterai la differenza. puoi sempre utilizzare la parceling in un secondo momento in fase di sviluppo se riscontri problemi di prestazioni.

3

Java Serializable: - Serializable proviene da Java standard ed è molto più facile da implementare tutto quello che dovete fare è implementare l'interfaccia Serializable e aggiungere di override due metodi.
Il problema con Serializable è che tenta di gestire correttamente tutto sotto il sole e utilizza un sacco di riflessione per determinare i tipi che vengono serializzati. Quindi diventa un oggetto muscoloso.

Androids Parcelable: - Android Inter-Process Communication (AIPC) file di dire Android come è dovrebbe schierare e unmarshalling tua object.It è meno generico e non utilizzare la riflessione e quindi dovrebbe avere molto meno spese generali ed essere molto più veloce.

saperne di più da http://www.3pillarglobal.com/blog/parcelable-vs-java-serialization-android-app-development

+0

Evidenziare il problema con la serializzazione dà questa risposta il mio +1 –

25

Questi concetti sono legati a Inter Process Communication (IPC).

Quando si inviano dati tra due applicazioni, è necessario assicurarsi che entrambe le applicazioni comprendano il formato dei dati inviati.

Soprattutto quando si inviano valori di tipo di dati non primitivi come classi e oggetti tra due applicazioni, è necessario convertirli in formato comprensibile al sistema operativo. O.S comprende solo i tipi primitivi (interi, caratteri ecc.). Il motivo della conversione è che dobbiamo comunicare al canale di comunicazione O.S.

Questo processo di conversione di tipi non primitivi in ​​primitivi e invio in altre applicazioni su un canale di comunicazione viene chiamato Serializzazione. Il processo inverso è chiamato De Serialization.

In Java, IPC dipende in gran parte dalle serializzabili per la serializzazione. Ma la serializzazione è progettata tenendo a mente le applicazioni desktop. Quando si esegue l'IPC nelle applicazioni mobili, è necessario assicurarsi che il processo di IPC non sia troppo pesante.

In termini semplici, la serializzazione è un concetto pesante per IPC. Al posto della serializzazione, Android ha optato per Binders per ottenere una comunicazione Inter-Process leggera. I leganti internamente dipendono fortemente dai pacchi, per fare l'IPC. I pacchi sono serializzabili leggeri. È preferibile utilizzare i pacchetti per il marshalling degli oggetti in flussi di byte.

Nota: l'IP del raccoglitore dipende in gran parte dal concetto di memoria condivisa per garantire che non vi sia molta duplicazione dei dati durante la condivisione tra le applicazioni.

+4

Non ho idea del motivo per cui questa risposta non ha avuto upvote fino ad ora, è abbastanza completa e ad essere onesti, uno dei migliori per me. – GoRoS

+0

@vsvankhede Beh, sembra che ci sia un tempo e un luogo per tutto e attualmente è il più upvoted. – GoRoS

5

Ottenuto una spiegazione molto buona della differenza tra Parcelable e Serialization.

Per iniziare con la tua domanda se il suo stato un lungo periodo di tempo, può aiutare gli altri:

  1. se devo utilizzati tecnica Parcelable o serializzazione per l'invio di dati da un'attività ad altri?

Ans: Parcelable è la scelta migliore (perché spiegato in seguito).

  1. è obbligatorio utilizzare uno di questi per l'invio di dati da uno all'altro?

Ans: Sì, come l'invio di dati (oggetto) da uno a altro richiede flussi di byte da scrivere e recuperati e che può essere fatto sia attraverso Parcelable o serializzazione.

  1. quando non li ho usare?

Ans: Questa parte si arleady cioè risposto, il passaggio di dati da un'attività all'altra.

  1. e la differenza esatta tra loro e le prestazioni di entrambi in aspetti Java.

Ans: 1. Parcelable è ben documentato nell'SDK di Android; la serializzazione d'altra parte è disponibile in Java.

  1. In Parcelable, gli sviluppatori di scrivere codice personalizzato per il marshalling e unmarshalling così crea meno oggetti spazzatura in confronto alla serializzazione. Le prestazioni di Parcelable over Serialization migliorano notevolmente (circa due volte più velocemente), grazie a questa implementazione personalizzata.

  2. La serializzazione è un'interfaccia marker, che implica che l'utente non può effettuare il marshalling dei dati in base alle proprie esigenze. In Serializzazione, un'operazione di marshalling viene eseguita su una Java Virtual Machine (JVM) utilizzando l'API Java reflection. Ciò consente di identificare il membro e il comportamento degli oggetti Java, ma anche di creare molti oggetti inutili. A causa di ciò, il processo di serializzazione è lento rispetto a Parcelable.

Risposta tratto da: this link

Vedi anche: serialization explained

Problemi correlati