2016-06-29 5 views
1

Ich weiß, dass in Android, wenn Sachen für eine Weile im Leerlauf ist, das Betriebssystem Dinge verschlingt, um Speicher freizugeben.Wenn ich neue Aktivitäten über Intents erstellt habe, sind die vorherigen Aktivitäten später noch da?

Also, wenn ich eine erste Aktivität habe, und ich eine zweite Aktivität mit einem Intent aufrufen und dann eine dritte Aktivität mit einem anderen Intent aufrufen, kann ich die Zurück-Schaltfläche verwenden, um zu den vorherigen Aktivitäten zurückzukehren.

Aber lassen Sie mich sagen, ich bleibe auf der dritten Aktivität, und lassen Sie das Telefon für eine Weile im Leerlauf, bis das Betriebssystem beschließt, meine App für den Speicher zu verschlingen. Wenn ich die App erneut öffne, habe ich den Stapel, den ich aus meinen Intents gebildet habe, verloren? Befinde ich mich immer noch in der dritten Aktivität mit der Fähigkeit, Zurück zu drücken und zu Aktivität 2, dann Aktivität 1 zu gehen?

+0

OS kümmert sich um den Aufruf von Lifecycle-Methoden. Wenn der Arbeitsspeicher nicht mehr ausreicht, werden möglicherweise einige Aktivitäten gelöscht, die nicht verwendet werden. – Vucko

+0

Das ist meine Frage. Ist es möglich, dass die dritte Aktivität zurückkommen würde, aber irgendwie wären die ersten beiden weg, also wäre ich "gestrandet" und nicht in der Lage, Zurück zu drücken, um zu früheren Aktivitäten zurückzukehren? – user6419910

+0

@ user6419910 ja ist es möglich, können Sie zurück Schlüssel in zukünftigen Aktivitäten oder 'moveTaskToBack' deaktivieren, oder Sie können Startmodi angeben, können Sie diese Seite lesen: [Android Manifest Aktivitätselemente] (https://developer.android.com/ guide/topics/manifest/activity-element.html) –

Antwort

0

Das Betriebssystem behandelt, wie lange eine bestimmte Aktivität im Speicher "aktiv" bleibt. Der "Stack" sollte sich jedoch nicht ändern, unabhängig davon, ob eine Aktivität "aktiv" ist oder nicht. Hier kommt das Bundle zum Tragen und die Methoden: "onSaveInstanceState()" und "onRestoreInstanceState()".

Die korrekte Implementierung dieser Methoden ist der Unterschied, dass die Aktivität auf dem Bildschirm in einem leeren Zustand angezeigt wird, während der vorherige Status beibehalten wird.

Dokumentation über Recreating an Activity

+0

frage Ich bin vertraut mit Speichern und Wiederherstellen Instanzstatus, aber wie kann ich das auf die Situation, die ich erwähnt, anwenden? – user6419910

+0

Nach meiner Erfahrung ist der Stapel immer noch "intakt". Da im OS die Aktivität 1 und 2 getötet wurde, wird 3 angezeigt, und wenn Sie "zurück" drücken, wird Aktivität 2 mit dem gespeicherten Paket neu erstellt.Und wenn Sie dann wieder zurückschlagen, wird Aktivität 1 mit dem gespeicherten Bundle neu erstellt. – FishStix

+0

Wenn Sie ein gespeichertes Bundle sagen, müssen Sie dies direkt implementieren oder behandelt Android dies? – user6419910

0

The Backstack bleibt für die Aufgabe in der Hand intakt. Es bleibt immer in der Task und wenn der Benutzer die Zurück-Taste drückt, geht es durch den Backstack wie das letzte Element. Nicht alle Aktivitäten im Stapel stehen jedoch im Vordergrund. Gewöhnlich ist nur das letzte Element, das in den Backstack (die Spitze des Stapels) gelegt wird, im Vordergrund, und wenn mehrere Apps/Tasks geöffnet sind, ist dies möglicherweise nicht einmal wahr. Hier ist ein großartiges Diagramm, um dies zu zeigen. Activity back stack

Nun sagen wir, ein Benutzer öffnet eine Aufgabe mit ein paar Aktivitäten in seinem Backstack. Die oberste Aktivität steht im Vordergrund und läuft normal, aber um Speicher zu erhalten, wurden die anderen Aktivitäten zerstört. Wenn nun der Benutzer den Zurück-Knopf drückt, weiß der Task, welche Aktivität im Back-Stack war und weiß, dass er jetzt zerstört ist. Es wird also nach dem Lebenszyklus der Aktivitäten neu erstellt, und alle darin enthaltenen Daten gehen verloren. Eine Möglichkeit, es zu erhalten (erwähnt durch die ursprüngliche Antwort), ist die Verwendung der onSaveInstanceState() und onRestoreInstanceState(), die Dinge in einem Bündel speichern, das Android für den Benutzer bewahrt, damit Daten gespeichert werden können. All diese Informationen finden Sie in der docs. Um Ihre Frage klarer zu beantworten, werden Sie in der Aktivität sein, in der Sie sich befinden, aber Sie können sie als eine neue Instanz dieser Aktivität behandeln und die Daten von vorher wiederherstellen, um sie auf die gleiche Weise anzuzeigen Verwenden Sie Bundle und implementieren Sie die oben genannten Methoden.

Verwandte Themen