Instanzstatus speichern und wiederherstellen leicht gemacht!

Als Anfänger, der einfache Apps erstellt, können Sie beim Testen feststellen, dass die Bildschirmdrehung alle vom Benutzer gesammelten Daten zurücksetzt. Die Bildschirmdrehung ist eine von vielen Lebenszyklusänderungen in Android, die die Aktivität zerstören und neu erstellen und dazu führen können, dass alle Daten verloren gehen! Keine großartige Benutzererfahrung.

Um Ihre App auf diese Änderungen am Aktivitätslebenszyklus vorzubereiten, können Sie der MainActivity zwei Methoden hinzufügen, um die Daten zu speichern und wiederherzustellen:

  1. onSaveInstanceState()
  2. onRestoreInstanceState()

Mit der Methode onSaveInstanceState() können Sie dem outState der App Schlüssel / Wert-Paare hinzufügen. Anschließend können Sie mit der Methode onRestoreInstanceState () den Wert abrufen und auf die Variable zurücksetzen, von der er ursprünglich erfasst wurde.

Um Ihre App auf die Verwendung dieser vorzubereiten, ist es wichtig, Instanzvariablen für alle Daten zu erstellen, die beibehalten werden müssen, wenn der Status der App dazu führt, dass die Aktivität zerstört wird. Diese Variablen befinden sich außerhalb von Methoden und sind von überall in der Klasse zugänglich.

Sie möchten auch die Ansichten identifizieren, die dem Benutzer diese Daten anzeigen, und angeben, dass die Daten weiterhin hier angezeigt werden sollen, wenn die Aktivität mit dem Attribut wiederhergestellt wird:

android:freezesText="true"

onSaveInstanceState():

Diese Methode wird in älteren Android-Versionen vor onStop() aufgerufen und kann in neueren Versionen nach onStop() aufgerufen werden.

 1 @Override
2 protected void onSaveInstanceState(Bundle outState) {
3 super.onSaveInstanceState(outState);
4 outState.putInt("AStringKey", variableData);
5 outState.putString("AStringKey2", variableData2);
6 }

Lassen Sie uns diese Methode aufschlüsseln:

  1. Die Überschreibung in Zeile eins zeigt an, dass Sie die Standarddeklaration der Methode überschreiben werden.
  2. Die Methodensignatur in Zeile zwei beginnt mit dem Zugriffsmodifikator „protected“, dies zeigt an, dass auf die Methode nur innerhalb der Klasse selbst, des Pakets oder einer Unterklasse zugegriffen werden kann. Der Rückgabetyp für diese Methode ist „void“, da keine Daten zurückgegeben werden. Der Parameter, den diese Methode verwendet, ist ein Objekt vom Typ Bundle mit dem Namen outState .
  3. Da wir diese Standardmethode überschreiben, müssen wir super (in Zeile drei) verwenden, um alle Standard-outState-Daten zu speichern.
  4. In Zeile vier können Sie mit dem Speichern Ihrer eigenen Daten beginnen. onSavedInstanceState() wird mit der Punktnotation im outState der App aufgerufen. Das erste Argument ist eine beliebige Zeichenfolge und wird als Schlüssel verwendet (ähnlich wie beim Festlegen einer Variablen), um auf den Wert zuzugreifen, den Sie im zweiten Argument speichern. Hier haben wir eine Instanzvariable bereitgestellt, die einen ganzzahligen Wert speichert. Beachten Sie, dass Zeile fünf sehr ähnlich ist, mit der Ausnahme, dass eine Variable vom Typ String im outState gespeichert wird.

onRestoreInstanceState():

Diese Methode wird nach onStart() aufgerufen.

 1 @Override
2 protected void onRestoreInstanceState(Bundle savedInstanceState){
3 super.onRestoreInstanceState(savedInstanceState);
4 variableData = savedInstanceState.getInt("AStringKey");
5 variableData2 = savedInstanceState.getString("AStringKey2");
6 }

Lassen Sie uns diese Methode aufschlüsseln:

  1. Die Überschreibung in Zeile eins zeigt an, dass Sie die Standarddeklaration der Methode überschreiben möchten.
  2. Die Methodensignatur in Zeile zwei beginnt mit dem Zugriffsmodifikator „protected“ Dies zeigt an, dass auf die Methode nur innerhalb der Klasse selbst, des Pakets oder einer Unterklasse zugegriffen werden kann. Der Rückgabetyp für diese Methode ist „void“, da keine Daten zurückgegeben werden. Der Parameter, den diese Methode verwendet, ist ein Objekt vom Typ Bundle mit dem Namen savedInstanceState.
  3. Da wir diese Standardmethode überschreiben, müssen wir super in Zeile drei verwenden, um alle Standarddaten von savedInstanceState wiederherzustellen.
  4. Da Sie Ihre relevanten App-Daten in Instanzvariablen gespeichert haben, setzen Sie die im outState gespeicherten Daten zurück auf die Variable, indem Sie eine get-Methode für savedInstanceState in Punktnotation aufrufen und den zum Speichern der Daten verwendeten Zeichenfolgenschlüssel als Argument angeben.

Ich hoffe, diese Erklärung hilft Ihnen, diese Methoden und ihre Verwendung besser zu verstehen. Weitere Informationen finden Sie in der Aktivitätsdokumentation für Android.

Viel Spaß beim Codieren!