5

Ich weiß, dass ein Bundle verwendet werden kann, um Daten zwischen Aktivitäten zu übergeben, sowie zum Speichern und Wiederherstellen von Daten im Falle von Konfigurationsänderungen wie eine Bildschirmdrehung.Wie lange dauert ein Bündel?

Ich habe auch gelesen, dass SharedPreferences ist die bevorzugte Möglichkeit, persistente Daten zu speichern, anstatt eine Bundle.

Warum genau ist das der Fall? Damit eine Bundle eine Konfigurationsänderung verarbeiten kann, muss sie auch nach dem Löschen einer Aktivität beibehalten werden. Was genau ist die Lebensdauer einer Bundle? Gibt es einen bestimmten Punkt, an dem es willkürlich durch Garbage Collection beseitigt wird, oder bleiben Daten von Bundle so lange bestehen, wie Sie sie nicht manuell löschen?

Antwort

1

Bundle dauert, während die Aktivität existiert, aka wurde nicht beendet.

Eine interessante Tatsache ist zu beachten, dass, wenn Prozess Tod auftritt und Android massakriert Ihre Anwendung und die Anwendungsklasse neu erstellt wird (onCreate() genannt wird), dann wird die Aktivität Stapel rekonstruieren, und die Aktivität wird aus dem saveInstanceState Bündel neu initialisiert .

Die SharedPreferences speichert buchstäblich die Daten, die Sie in einer XML-Datei im Ordner data/<applicationname>/preferences geben, wenn ich mich an den Speicherort richtig erinnere.

+0

Wann wird eine Aktivität als abgeschlossen betrachtet? Ich weiß, es ist nicht, wenn die Aktivität zerstört wird. Es scheint auch, dass wenn der Benutzer zurück drückt, um eine App zu beenden, das Bündel zurückgesetzt wird? Wäre es also richtig zu sagen, dass eine Aktivität beendet ist, wenn der Benutzer eine App manuell beendet? – ryye

+0

Eine Aktivität ist ** beendet **, wenn Sie entweder das Stoppen der App erzwingen oder der Benutzer die Schaltfläche "Zurück" drückt und die Implementierung der Implementierung onBackPressed() 'die Methode' finish() 'aufruft. Sie können mit der Methode 'isFinishing()' darauf zugreifen, ob eine Aktivität in Ihren 'onPause()', 'onStop()', 'onDestroy()' Methoden endet. – EpicPandaForce

2

SharedPreferences sind für einfache persistente Einstellungen Speicher. Wie die Startseite eines Browsers, der jedes Mal verfügbar sein sollte, wenn der Benutzer die App öffnet. Dies sind nur Schlüssel: Wertpaare, die für einfache Dinge gedacht sind.

Bundle ist eine Möglichkeit zum Speichern von Daten, die entweder an einen anderen Kontext (eine andere Aktivität, Dienst usw.) übergeben werden oder um Ihren eigenen aktuellen Status im Status onSaveInstanceState und onRestoreInstance zu speichern und wiederherzustellen. Diese Daten sind NICHT persistent und verwendet, während die Anwendung verwendet wird.

+1

Aber wenn Bundle verwendet werden kann, um während OnRestoreInstance wiederherzustellen, musste es über die OnDestroy einer Aktivität bestehen, nicht wahr? Würden die Daten nicht als persistent betrachtet? – ryye

+0

Solange die Anwendung läuft. Sobald die Anwendung zerstört ist, sind es auch die Paketdaten. – Shahzeb