2016-02-20 6 views
7

Ich bin auf 2 verschiedene Typen gestoßen, um meine Aktivität basierend auf einigen Parametern laufen zu lassen. Die erste ist savedInstanceState und der andere ist getIntent.getExtras()savedInstanceState vs getIntent(). GetExtras()

Q1) Also, was ich nicht verstehe, ist, wenn ich Bündel meiner Tätigkeit übergeben und dann beginnen, sollte es Habe das Bündel. Wenn die Aktivität aus irgendeinem Grund jedoch erneut erstellt wird, sollte das gleiche Bündel erneut verwendet werden. (habe ich recht?)

Q2) Basierend auf der Tatsache, dass Q1 wahr ist, und die Tatsache, dass ich nicht nur das Bündel überschreiben kann, sobald die Aktivität bereits begonnen hat, denke ich, wenn aus irgendeinem Grund in meinem bereits begonnen Aktivität, ich möchte einige Parameter des Bündels ändern, ich sollte einige Aktivitätsfelder erstellen und diese Felder in meinem Aktivitätsleben verwenden. Und überschreiben saveInstanseState, um die neuen Felder zu speichern, wenn aus irgendeinem Grund meine Aktivität neu erstellt würde. ist es wahr?

Q3) Basierend auf der Tatsache, dass alle oben wahr ist, in onCreate() sollte wie folgt jede Aktivität in Welt von Android starten müssen:

if (savedInstanceState != null) { 
    mType = savedInstanceState.getInt("some_val1"); 
    mCardId = savedInstanceState.getLong("some_val2"); 
    mQuery = savedInstanceState.getString("some_val3"); 
    mCategory = savedInstanceState.getLong("some_val4");; 
} else { 
    mType = getIntent().getExtras().getInt("some_val1"); 
    mCardId = getIntent().getExtras().getLong("some_val2"); 
    mQuery = getIntent().getExtras().getString("some_val3"); 
    mCategory = getIntent().getExtras().getString("some_val4"); 
} 

Q4) Angenommen onSaveInstanceState genannt wurde und gespeichert Werte, die sich vom ursprünglichen Bündel unterscheiden, das die Aktivität gestartet hat (getIntent.getExtras). Wenn die Aktivität erneut erstellt wird, bedeutet dies, dass sich saveInstanceState von getIntent.getExtras() unterscheidet oder sie jetzt identisch sind? (Wenn sie gleich sind, dann hat das If/Else auf dem obigen Code keine wahre Bedeutung, denn es ist dasselbe!).

Q5) Wenn ich nicht die onSaveInstanceState außer Kraft gesetzt habe, aber als ich die Aktivität erstellt Ich gebe es ein Bundle, bedeutet das immer noch, dass ich mein ursprüngliches Paket erhalten, wenn die Aktivität wieder neu? (Ich denke, diese Frage wird sich aufgrund anderer Antworten selbst beantworten)

Antwort

6

Der Hauptunterschied zwischen getIntent().getExtras() und der savedInstanceState ist, dass sie unterschiedliche Nutzungen haben. Die Absicht ist für die Kommunikation zwischen Aktivitäten, während der gespeicherte Status für den aktuellen Status Ihrer UI ist, wenn Sie Ihre Aktivität verlassen, z. durch Drücken der Home-Taste. So wird die Position Ihres ListView s und ähnlichem oder der Wert von ungesichert TextEdit s gespeichert.

Q1: Ja, im Allgemeinen sollten diese Informationen nicht verloren gehen, solange Sie die Aktivität nicht ein zweites Mal öffnen.

Q2: True soweit. Die Standardansichten speichern ihren Status, sodass Sie dies nicht selbst tun müssen. Wenn Ihre Aktivität jedoch ein zweites Mal mit einem anderen Bündel gestartet wird, haben Sie die neuen Werte.

Q3: Nein, nicht notwendig, das hängt von Ihrem Anwendungsfall ab, aber das würde nichts kaputt machen. Der Punkt ist, wenn Sie Datum aus dem Internet laden, müssen Sie nur einmal warten, auf dem zweiten onCreate() Aufruf werden die Daten wiederhergestellt (wenn Sie sie in UI-Elementen mit einer ID zeigen!).

Q4: Die Absicht wäre der Anfangswert, während der gespeicherte Zustand der modifizierte Zustand der Werte ist.

Q5: Im Allgemeinen sollte das gleiche funktionieren. Da die grundlegenden ui Elemente ihren Zustand standardmäßig speichern.

Der Punkt des gespeicherten Status besteht darin, Änderungen selbst dann beizubehalten, wenn Ihre App im Hintergrund zerstört wurde. So wird Ihre App an dem Punkt fortgesetzt, an dem sie gelöscht wurde, auch wenn sie nicht mehr im Speicher Ihres Geräts war.