2012-08-01 8 views
5

Considerando l'architettura Android e considerando il design operativo di Android con cose come intenti, visualizzazioni, attività, provider di contenuti e così via, qualcuno può spiegarmi che tipo di "cosa" è un pacco o un pacchetto? La spiegazione scritta sul sito web di Android suona un po 'troppo sconcertante per me, voglio dire leggere "Un contenitore speciale sicuro per il tipo, chiamato Bundle, è disponibile per le mappe chiave/valore di valori eterogenei." Non so nulla di più su Bundles, per me possono essere file XML, mappe hash e tutte le altre varianti per "mappe chiave/valore".Cosa significa Android con "tutti i tipi di dati parcelable" e come posso utilizzare questi dati?

Che cos'è un pacchetto Parcelable o Bundle e qual è il loro design e cosa fanno?

Grazie.

risposta

10

Parcelable e Bundle sono pacchetti di informazioni che si desidera inviare con l'intento!

Bundle: Se si desidera avviare nuova activity è possibile inviare Bundle di informazioni al activity insieme al new Intent che si è creato:

// Bundle b is sent with new intent i 
Bundle b = new Bundle(); 
b.putString(key, value); 
b.putInt(key, value); 
Intent i = new Intent(...); 
i.putExtras(b); 
startActivity(i); 
// In the activity which started from the intent i, you can get the bundle b 
this.getIntent().getExtras(); 

Parcelable è un interface, se si vuole passare un object (la propria classe) con bundle o con intent, si dovrebbe implementare questa interface:

class Example implements Parcelable{ 
     // some information here 
} 
// You can send with intent or bundle: 
b.putParcelable(key, value); 
i.putExtra(name, value); 

Altro dettaglio di Google Android qui: BundleParcelable

+0

Non è necessario implementare Parcelable. Potresti semplicemente implementare Serializable. – Mark

+4

Scoraggiamo fortemente l'uso di Serializable per motivi di prestazioni. Un'implementazione Parcelable è molto, molto più efficiente. – hackbod

+0

Sono d'accordo con @Hackbod! –

3

A Bundle strumenti Parcelable. Un'istanza di bundle viene utilizzata per memorizzare coppie nome/valore, dove il nome è una stringa e il valore è una classe che implementa Parcelable. Una classe che implementa Parcelable può essere convertita in Parcel, che può essere serializzata su un IBinder, che viene utilizzato per IPC.

L'uso più comune per questo è di passare i valori tra le attività ed i servizi (extra intenti)

4

Android ha definito una nuova leggera struttura di IPC (Inter Process Communication) di dati denominato Pacco, dove si può appiattire gli oggetti nel flusso di byte, stesso concetto di serializzazione di Java 2 SDK.

Una definizione breve di un pacchetto Android è quella di un contenitore di messaggi per la comunicazione inter-processo (IPC) leggera e ad alte prestazioni. Su Android, un "processo" è uno standard di Linux, e un processo non può normalmente accedere alla memoria di un altro processo, quindi con Parcels, il sistema Android scompone gli oggetti in primitive che possono essere sottoposte a marshalling/unmarshaled attraverso i limiti del processo.

Ma i pacchi possono anche essere utilizzati all'interno dello stesso processo, per passare i dati tra diversi componenti di una stessa applicazione. Ad esempio, una tipica applicazione Android ha diverse schermate, chiamate "Attività", e deve comunicare dati o azioni da un'attività a quella successiva. Per scrivere un oggetto che può essere passato, possiamo implementare l'interfaccia Parcelable. Android fornisce un oggetto Parcelable integrato chiamato Intent che viene utilizzato per passare le informazioni da un componente all'altro

Il bundle è il modo di passare le informazioni tra i componenti Android di Android. Come hai detto, è un dizionario in cui possiamo inserire coppie di valori chiave. Qualsiasi cosa che può essere messa in un pacchetto dovrebbe essere primitiva o pacchettizzata.

Problemi correlati