2014-04-08 17 views
7

In erster Linie könnte diese Frage für einige Android-Veteranen wirklich absurd klingen, aber als Neuling, muss ich wirklich diese Frage stellen:

Intent Eine Intent ist eine passive Datenstruktur, die Informationen von einem Activity zum anderen trägt. Ein Intent ist auch in der Lage, Daten in Form von Name-Wert-Paaren (über putExtra()) zu halten.

Aber beim Überschreiben der onCreate() Methode übergeben wir eine Bundle als Parameter, der letztlich auch Werte in Form von Name-Wert-Paaren hält und in der Lage ist, Informationen mit Hilfe von onSaveInstanceState() zu speichern.

In so einem Szenario brauchen wir beide und was unterscheidet die beiden?

UPDATE

Ich glaube, ich habe geführt euch in einen Irrglauben, dass ich das falsch verstanden habe, was ein Intent ist:

Als ich sagte, „Ein Intent ist eine passive Datenstruktur, die Activity Informationen von einem trägt zu einem anderen ", was ich darauf hinweisen wollte, war, dass auch eine Intent Informationen (andere als die Kontext-und Action-Beschreibung) mit Hilfe von putExtra() Methode tragen kann. Warum müssen wir dann eine Bundle verwenden?

Bitte geben Sie auch einen Grund in den Kommentaren unten, falls Sie die Frage abstimmen. Danke für die Großzügigkeit.Was ist der Unterschied zwischen einem Bündel und einer Absicht?

+0

Lesen Sie diese http://stackoverflow.com/questions/4999991/what-isa-bundle-in-android-application#autocomment35012928 – user

+0

Der obige Link fehlt der Punkt dieser Frage, die zu unterscheiden ist Datenübergabe mit Absicht und Datenübergabe mit einem Bundle. Wenn Sie so weit gekommen sind, haben Sie diesen Link bereits besucht. –

Antwort

3

Ich weiß nicht wirklich, von wo aus Sie Intent diese Definition bekam, aber als ‚Intent‘ Definition

Eine Absicht ist eine abstrakte Beschreibung eines Betriebs durchgeführt werden. Es kann mit startActivity verwendet werden, um eine Aktivität zu starten, broadcastIntent es alle interessierten BroadcastReceiver Komponenten zu senden, und den Start (Intent) oder bindService (Intent, ServiceConnection, int) mit einem Hintergrunddienst zu kommunizieren.

Ein Intent bietet die Möglichkeit, die späte Laufzeitbindung zwischen dem Code in verschiedenen Anwendungen durchzuführen. Seine wichtigste Verwendung ist in der Einführung von Aktivitäten, wo es als Klebstoff zwischen Aktivitäten gedacht werden kann. Es ist im Grunde eine passive Datenstruktur , die eine abstrakte Beschreibung einer auszuführenden Aktion enthält.

So Intent eine Aktion, um neue (Aktivität, Dienstleistung, BroadCastReceiver) zu verbinden

In Intent Sie eine Definition für Extras

Extras finden - Dies ist ein Bundle von irgendwelchen zusätzlichen Informationen. Dies kann verwendet werden, um erweiterte Informationen für die Komponente bereitzustellen. Wenn wir zum Beispiel eine Aktion zum Senden einer E-Mail-Nachricht haben, können wir hier auch zusätzliche Daten einfügen, um ein Thema, einen Text usw. anzugeben.

Das heißt also, Extras in dem Intent ist ein Objekt aus einem Bündel

-Bundle gehen, wie Sie erwähnten es ein Träger für Daten von einem Intent zum anderes und ist eine Karte von Key-Value Variablen.

+0

Bitte lesen Sie die Frage erneut und kehren Sie zurück. Ich habe die Beschreibung aktualisiert. – ikartik90

+0

Überprüfen Sie meine Updates dann –

+0

Aber warum ist der Rückgabetyp von 'putExtra()' ein 'Intent' und kein' Bundle'? Bitte überlege meine dummen Fragen noch eine Weile und gib mir Antworten. Vielen Dank. – ikartik90

4

Ich denke, Sie haben bereits verstanden, was ein Bundle ist: eine Sammlung von Schlüssel-Wert-Paaren.

Allerdings ist eine Absicht viel mehr. Es enthält Informationen über eine Operation, die ausgeführt werden sollte. Diese neue Operation wird durch die Aktion, für die sie verwendet werden kann, und durch die Daten definiert, die sie anzeigen/bearbeiten/hinzufügen soll. Das System verwendet diese Informationen, um eine geeignete App-Komponente (Aktivität/Broadcast/Service) für die angeforderte Aktion zu finden.

Denken Sie an die Absicht als ein Bündel, das auch Informationen darüber enthält, wer die enthaltenen Daten erhalten soll und wie sie präsentiert werden sollen.

+0

Aktualisiert die Frage. Sorry für die unpassende Beschreibung vorher. Ich komme zu Ihrer Antwort, aber das ist es, was ich zu fragen gedenke: "Warum brauchen wir ein' Bündel ', wenn wir bereits die gleichen Funktionen mit einer' Absicht 'zur Verfügung haben?" – ikartik90

+2

Weil Sie manchmal eine Sammlung von Schlüssel-Wert-Paaren benötigen, die nicht die vordefinierte Bedeutung der Felder der Absicht haben. Sie benötigen oft eine Art Wörterbuch an einem Ort, an dem es nicht mit dem Starten einer Aktion verbunden ist." sowieso. –

3

Intent erleichtern die Kommunikation zwischen Komponenten. Intent ist die Nachricht, die zwischen Komponenten wie Aktivität übergeben wird. die intent.putExtra (Schlüssel, Wert) und 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); 

Mit Bundle verwendet werden können:

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

Rufen Sie das Bündel in eine andere Tätigkeit :

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

Von der Quelle Absicht Klasse gibt es keinen Unterschied zwischen den beiden. Unten finden Sie Code aus Intent Klasse:

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

Und

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

Ich denke also, einzige Unterschied ist, einfache Bedienung .. :) für 1. Sie müssen nicht erstellen dein Bündel ausdrücklich.

Verwandte Themen