2014-04-08 21 views
7

In primo luogo, questa domanda potrebbe suonare davvero assurdo alcuni veterani Android ma essendo un principiante, ho davvero bisogno di fare questa domanda:

Un Intent è una struttura di dati passiva che trasporta le informazioni da un Activity ad un altro. Un Intent è anche in grado di contenere dati sotto forma di coppie nome-valore (tramite putExtra()).

Tuttavia, ignorando il metodo onCreate(), passiamo a Bundle come parametro, che alla fine contiene anche valori sotto forma di coppie nome-valore ed è in grado di memorizzare le informazioni con l'aiuto di onSaveInstanceState().

In uno scenario del genere, perché abbiamo bisogno di entrambi e cosa distingue i due?

UPDATE

Suppongo che ho portato voi ragazzi in una falsa credenza che ho capito male quello che un Intent è:

Quando ho detto "Un Intent è una struttura di dati passiva che trasporta informazioni da un Activity ad un altro ", quello che intendevo sottolineare era che anche uno può trasportare informazioni (diverse dal contesto e dalla descrizione dell'azione) con l'aiuto del metodo putExtra(). Perché abbiamo bisogno di usare un Bundle quindi?

Inoltre, si prega di assicurarsi di lasciare un motivo nei commenti qui sotto nel caso in cui giù/su votare la domanda. Grazie per la generosità.Qual è la differenza tra un pacchetto e un intento?

+0

Leggi questo http://stackoverflow.com/questions/4999991/what-is-a-bundle-in-an-android-application#autocomment35012928 – user

+0

Il link sopra manca il punto di questa domanda, che è quello di distinguere tra dati che passano con un intento e dati che passano con un pacchetto. Se sei arrivato fin qui, hai già visitato quel link. –

risposta

3

Io davvero non so da dove hai preso questa definizione per Intent, ma come un 'Intent' definizione

Un intento è una descrizione astratta di un'operazione da eseguire. Può essere utilizzato con startActivity per lanciare un'attività, broadcastIntent per inviarlo a qualsiasi BroadcastReceiver componenti interessate, e StartService (Intento) o bindService (Intent, ServiceConnection, int) per comunicare con uno sfondo di servizio.

Un intent fornisce una funzionalità per eseguire il runtime in ritardo che associa tra il codice in diverse applicazioni. Il suo uso più significativo è nel lancio di attività, dove può essere pensato come la colla tra le attività. Si tratta fondamentalmente di una struttura dati passiva contenente una descrizione astratta di un'azione da eseguire.

così intento è un'azione per creare un collegamento a nuovo (Attività, Servizio, BroadCastReceiver)

In Intent troverete una definizione per Extra

extra - Si tratta di un bundle di qualsiasi informazione aggiuntiva. Questo può essere usato per fornire informazioni estese al componente. Ad esempio, se abbiamo un'azione per inviare un messaggio di posta elettronica, potremmo anche includere ulteriori dati qui per fornire un oggetto, un corpo, ecc.

Quindi questo significa Extra in l'intento è un oggetto di un fascio

Andando a Bundle come lei ha ricordato che è un vettore per i dati da un Intento ad un altro ed è una mappa di Key-Value variabili.

+0

Rileggi la domanda e ripristina. Ho aggiornato la descrizione. – ikartik90

+0

Controlla i miei aggiornamenti quindi –

+0

Ma allora perché il tipo restituito di 'putExtra()' un 'Intento' e non un' Bundle'? Per favore, tollera le mie stupide domande ancora per un po 'e forniscimi le risposte. Grazie. – ikartik90

4

Penso che tu abbia già capito cosa sia un Bundle: una raccolta di coppie chiave-valore.

Tuttavia, un intento è molto di più. Contiene informazioni su un'operazione che dovrebbe essere eseguita. Questa nuova operazione è definita dall'azione per cui può essere utilizzata e dai dati che dovrebbe mostrare/modificare/aggiungere. Il sistema utilizza queste informazioni per trovare un componente app adatto (attività/trasmissione/servizio) per l'azione richiesta.

Pensa all'intento come a un pacchetto che contiene anche informazioni su chi dovrebbe ricevere i dati contenuti e come dovrebbe essere presentato.

+0

Aggiornato la domanda. Scusa per la descrizione inappropriata prima. Venendo alla tua risposta, ma è quello che intendo chiedere: "Perché abbiamo bisogno di un' Bundle' quando abbiamo già le stesse funzionalità disponibili con un 'Intento'?" – ikartik90

+2

Poiché a volte hai bisogno di un insieme di coppie chiave-valore che non hanno la significazione predefinita, i campi dell'Intent hanno spesso bisogno di qualche tipo di dizionario in un posto in cui non è correlato all'avvio di un'azione in Comunque. –

3

Intenzionato facilitare la comunicazione tra i componenti. Intenso è il messaggio che viene passato tra componenti come l'attività. che può essere utilizzato intent.putExtra (chiave, valore) e intent.putExtra (Bundle)

Intent intent = new Intent(); 

intent.setClass(this, Other_Activity.class); 
// intent.putExtra(key,value) 
intent.putExtra("EXTRA_ID", "SOME DATAS"); 
startActivity(intent); 

Utilizzando Bundle:

Bundle bundle=new Bundle(); 
bundle.put(key,value); 
intent.putExtra(bundle); 
startActivity(intent); 

chiamata il fascio in un'altra attività :

Bundle extras=getIntent().getExtras(); 
extras.getString(key); 
2

Dalla sorgente della classe Intent, non c'è davvero alcuna differenza tra i due. Controlla qui sotto il codice dalla classe Intent:

public Intent putExtra(String name, String value) { 
     if (mExtras == null) { 
      mExtras = new Bundle(); 
     } 
     mExtras.putString(name, value); 
     return this; 
    } 

E

public Intent putExtras(Bundle extras) { 
     if (mExtras == null) { 
      mExtras = new Bundle(); 
     } 
     mExtras.putAll(extras); 
     return this; 
    } 

Quindi penso, unica differenza è facilità d'uso .. :) per il 1 °, non è necessario creare il pacchetto in modo esplicito.

Problemi correlati