Gem og gendan forekomst tilstand gjort nemt!

som nybegynder, der laver enkle apps, kan du bemærke under testen, at skærmrotation nulstiller alle data indsamlet fra brugeren. Skærmrotation er en af mange livscyklusændringer i Android, der kan ødelægge og genskabe aktiviteten og få alle data til at gå tabt! Ikke en god brugeroplevelse.

for at forberede din app til disse ændringer i Aktivitetslivscyklussen er der to metoder, du kan føje til hovedaktiviteten for at gemme og gendanne dataene:

  1. onSaveInstanceState ()
  2. onRestoreInstanceState()

den onsaveinstancestate () metode giver dig mulighed for at tilføje nøgle/værdi par til outState af app. Derefter giver onRestoreInstanceState () – metoden dig mulighed for at hente værdien og indstille den tilbage til den variabel, hvorfra den oprindeligt blev indsamlet.

for at forberede din app til at bruge disse er det vigtigt at oprette instansvariabler for alle de data, der skal bevares, når appens tilstand får aktiviteten til at blive ødelagt. Disse variabler er uden for nogen metoder og tilgængelige fra hvor som helst i klassen.

du vil også identificere de Visninger, der viser disse data til brugeren, og angive, at du vil have, at dataene fortsat skal vises her, når aktiviteten gendannes med attributten:

android:freezesText="true"

onSaveInstanceState ():

denne metode kaldes før onStop () i ældre versioner af Android og kan kaldes efter onStop () for nyere versioner.

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

lad os nedbryde denne metode:

  1. tilsidesættelsen på linje et angiver, at du vil tilsidesætte standardangivelsen for metoden.
  2. metodesignaturen på linje to begynder med adgangsmodifikatoren “beskyttet”, dette indikerer, at metoden kun kan fås i selve klassen, pakken eller en underklasse. Returtypen for denne metode er “ugyldig”, da den ikke returnerer nogen data. Parameteren denne metode tager i er et bundt typen objekt med navnet outState.
  3. da vi tilsidesætter denne standardmetode, skal vi bruge super (på linje tre) til at gemme alle standard outState data.
  4. på linje fire kan du begynde at gemme dine egne data. onSavedInstanceState () kaldes ved hjælp af dot notation på outState af app. Det første argument er en streng og bruges som en nøgle (svarende til at indstille en variabel) for at få adgang til den værdi, du gemmer i det andet argument. Her har vi leveret en instansvariabel, der gemmer en heltalsværdi. Bemærk linje fem er meget ens med den undtagelse, at en variabel af Strengtypen gemmes i outState.

onRestoreInstanceState():

denne metode kaldes efter onStart().

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

lad os nedbryde denne metode:

  1. override on line one angiver, at du vil tilsidesætte standardangivelsen for metoden.
  2. metodesignaturen på linje to begynder med adgangsmodifikatoren “beskyttet” dette indikerer, at metoden kun kan fås i selve klassen, pakken eller en underklasse. Returtypen for denne metode er “ugyldig”, da den ikke returnerer nogen data. Parameteren denne metode tager i er et bundt typen objekt ved navn savedInstanceState.
  3. da vi tilsidesætter denne standardmetode, skal vi bruge super, på linje tre, for at gendanne alle standard savedInstanceState data.
  4. da du lagrede dine relevante appdata i instansvariabler, indstiller du de data, du har gemt i outState, tilbage til variablen ved at kalde en get-metode på savedInstanceState ved hjælp af dot notation og angiver den Strengnøgle, der bruges til at gemme dataene som argument.

jeg håber, at denne forklaring hjælper dig med bedre at forstå disse metoder og hvordan du bruger dem. For mere information besøg Aktivitetsdokumentationen til Android.

Glad Kodning!