spara och återställa instans tillstånd enkelt!

som nybörjare som gör enkla appar kan du märka under testning att skärmrotation återställer all data som samlas in från användaren. Skärmrotation är en av många livscykelförändringar i Android som kan förstöra och återskapa aktiviteten och få all data att gå vilse! Inte en bra användarupplevelse.

för att förbereda din app för dessa ändringar i Aktivitetslivscykeln finns det två metoder som du kan lägga till i MainActivity för att spara och återställa data:

  1. onSaveInstanceState ()
  2. onRestoreInstanceState()

metoden onSaveInstanceState () låter dig lägga till nyckel – /värdepar till appens outState. Då kan onRestoreInstanceState () – metoden låta dig hämta värdet och ställa tillbaka det till variabeln från vilken den ursprungligen samlades in.

för att förbereda din app för att använda dessa är det viktigt att skapa instansvariabler för alla data som måste bevaras när appens tillstånd gör att aktiviteten förstörs. Dessa variabler är utanför alla metoder och tillgängliga var som helst i klassen.

du vill också identifiera de vyer som visar dessa data för användaren och ange att du vill att data ska fortsätta att visas här när aktiviteten återställs med attributet:

android:freezesText="true"

onSaveInstanceState ():

denna metod kallas före onStop () i äldre versioner av Android och kan anropas efter onStop () för nyare versioner.

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

låter bryta ner denna metod:

  1. åsidosättandet på rad ett, indikerar att du kommer att åsidosätta standarddeklarationen för metoden.
  2. metodsignaturen på rad två börjar med åtkomstmodifieraren ”skyddad”, vilket indikerar att metoden endast kan nås inom själva klassen, paketet eller en underklass. Returtypen för denna metod är ”ogiltig” eftersom den inte returnerar några data. Parametern som denna metod tar in är ett Bunttypobjekt som heter outState.
  3. eftersom vi åsidosätter denna standardmetod måste vi använda super (på rad tre) för att lagra alla standarddata.
  4. på rad fyra kan du börja lagra dina egna data. onSavedInstanceState () anropas med hjälp av punktnotation på outState av appen. Det första argumentet är vilken sträng som helst och används som en nyckel (liknar att ställa in en variabel) för att komma åt värdet du lagrar i det andra argumentet. Här har vi tillhandahållit en instansvariabel som lagrar ett heltal. Meddelande linje fem är mycket lika med undantag för att en variabel av Strängtypen sparas i outState.

onRestoreInstanceState ():

denna metod kallas 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 }

låter bryta ner denna metod:

  1. Åsidosätt på rad ett, indikerar att du kommer att åsidosätta standarddeklarationen för metoden.
  2. metodsignaturen på rad två börjar med åtkomstmodifieraren ”skyddad” Detta indikerar att metoden endast kan nås inom själva klassen, paketet eller en underklass. Returtypen för denna metod är ”ogiltig” eftersom den inte returnerar några data. Parametern som denna metod tar in är ett Bunttypobjekt som heter savedInstanceState.
  3. eftersom vi åsidosätter denna standardmetod måste vi använda super, på rad tre, för att återställa alla standard savedInstanceState-data.
  4. eftersom du lagrade dina relevanta appdata i instansvariabler ställer du in de data du sparade i outState tillbaka till variabeln genom att ringa en get-metod på savedInstanceState med hjälp av punktnotation och ange Strängnyckeln som används för att lagra data som argument.

jag hoppas att denna förklaring hjälper dig att bättre förstå dessa metoder och hur du använder dem. För mer information besök Aktivitetsdokumentationen för Android.

Lycklig Kodning!