Instantiestatus opslaan en herstellen eenvoudig gemaakt!
als beginner bij het maken van eenvoudige apps, kunt u tijdens het testen merken dat schermrotatie alle gegevens van de gebruiker Reset. Scherm rotatie is een van de vele levenscyclus veranderingen in Android die kan vernietigen en opnieuw de Activiteit en ervoor zorgen dat alle gegevens verloren gaan! Geen geweldige gebruikerservaring.
om uw app voor te bereiden op deze wijzigingen in de levenscyclus van de activiteit zijn er twee methoden die u aan de hoofdactiviteit kunt toevoegen om de gegevens op te slaan en te herstellen:
- onSaveInstanceState ()
- onRestoreInstanceState()
de onSaveInstanceState () methode kunt u sleutel/waarde paren toe te voegen aan de outState van de app. Dan zal de onrestoreinstancestate() methode u toelaten om de waarde op te halen en stel het terug naar de variabele waaruit het oorspronkelijk werd verzameld.
om uw app voor te bereiden om deze te gebruiken, is het belangrijk om instantievariabelen aan te maken voor alle gegevens die bewaard moeten worden wanneer de status van de app de activiteit vernietigt. Deze variabelen zijn buiten alle methoden en toegankelijk vanaf elke locatie in de klasse.
u wilt ook de weergaven identificeren die deze gegevens aan de gebruiker weergeven en aangeven dat u wilt dat de gegevens hier worden weergegeven wanneer de activiteit wordt hersteld met het attribuut:
android:freezesText="true"
onSaveInstanceState ():
deze methode wordt aangeroepen voor onStop() in oudere versies van Android en kan worden aangeroepen na onStop () voor nieuwere versies.
1 @Override
2 protected void onSaveInstanceState(Bundle outState) {
3 super.onSaveInstanceState(outState);
4 outState.putInt("AStringKey", variableData);
5 outState.putString("AStringKey2", variableData2);
6 }
laten we deze methode opsplitsen:
- de override on line one, geeft aan dat u de standaard declaratie van de methode gaat overschrijven.
- de methodehandtekening op regel twee begint met de access modifier “protected”, dit geeft aan dat de methode alleen toegankelijk is binnen de klasse zelf, het pakket of een subklasse. Het retourtype voor deze methode is “void” omdat het geen gegevens retourneert. De parameter die deze methode in beslag neemt is een bundeltype object met de naam outState.
- omdat we deze standaardmethode overschrijven, moeten we super (op regel drie) gebruiken om alle standaard outState gegevens op te slaan.
- op regel vier kunt u beginnen met het opslaan van uw eigen gegevens. onSavedInstanceState () wordt genoemd met behulp van dot notatie op de outState van de app. Het eerste argument is een String en wordt gebruikt als een sleutel (vergelijkbaar met het instellen van een variabele) om toegang te krijgen tot de waarde die u opslaat in het tweede argument. Hier hebben we een instance variabele gegeven die een integer waarde opslaat. Merk op dat regel vijf zeer vergelijkbaar is met de uitzondering dat een variabele van het type String wordt opgeslagen in de outState.
onRestoreInstanceState ():
deze methode wordt genoemd na onStart ().
1 @Override
2 protected void onRestoreInstanceState(Bundle savedInstanceState){
3 super.onRestoreInstanceState(savedInstanceState);
4 variableData = savedInstanceState.getInt("AStringKey");
5 variableData2 = savedInstanceState.getString("AStringKey2");
6 }
laat deze methode opsplitsen:
- de override on line one, geeft aan dat u de standaard declaratie van de methode gaat overschrijven.
- de methodehandtekening op regel twee begint met de access modifier “protected” dit geeft aan dat de methode alleen toegankelijk is binnen de klasse zelf, het pakket of een subklasse. Het retourtype voor deze methode is “void” omdat het geen gegevens retourneert. De parameter die deze methode in beslag neemt is een bundeltype object genaamd savedInstanceState.
- omdat we deze standaardmethode overschrijven, moeten we super gebruiken, op regel drie, om alle standaard savedinstancestategegevens te herstellen.
- omdat u uw relevante app-gegevens in instance-variabelen hebt opgeslagen, stelt u de gegevens die u in de outState hebt opgeslagen terug naar de variabele door een get-methode aan te roepen op savedInstanceState met behulp van puntnotatie en geeft u de String-sleutel die wordt gebruikt om de gegevens op te slaan als argument.
ik hoop dat deze uitleg U helpt om deze methoden beter te begrijpen en hoe ze te gebruiken. Ga voor meer informatie naar de Activiteitendocumentatie voor Android.
Gelukkig Coderen!