Middle
Wat is de specificiteit van het wisselen van posities op het Android-platform?
sobes.tech AI
Antwoord van AI
Bij het wijzigen van posities (schermrotatie of andere configuratiewijzigingen) op Android wordt de huidige Activity vernietigd en wordt een nieuwe aangemaakt.
Wat gebeurt er:
- De levenscyclusmethoden van de oude Activity worden aangeroepen:
onPause(),onStop(),onDestroy(). - De oude Activity wordt uit het geheugen verwijderd.
- Een nieuwe Activity wordt aangemaakt.
- De levenscyclusmethoden van de nieuwe Activity worden aangeroepen:
onCreate(),onStart(),onResume().
Specifiek voor QA:
- Gegevensverlies: Niet opgeslagen gegevens in invoervelden, geselecteerde lijstitems, enz., kunnen verloren gaan als ze niet worden opgeslagen.
- UI-toestand: De zichtbaarheid van elementen, scrollposities, geselecteerde tabbladen en andere UI-toestanden kunnen worden teruggezet naar de standaardwaarden.
- Achtergrondactiviteiten: Lopende achtergrondtaken (zoals gegevensladen) kunnen worden onderbroken of onjuist worden voltooid.
- Prestaties: Meerdere configuratiewijzigingen kunnen de app vertragen vanwege het voortdurend opnieuw maken van de Activity.
- Geheugenlekken: Onjuist omgaan met bronnen (zoals niet-afgemelde Listeners in
onDestroy()) kan leiden tot geheugenlekken.
Hoe ontwikkelaars hiermee omgaan (en wat QA eerst moet controleren):
- Toestand opslaan: Gebruik van
onSaveInstanceState(),onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).// Voorbeeld van gegevens opslaan in onSaveInstanceState() @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putString("saved_text", myEditText.getText().toString()); }// Voorbeeld van gegevens herstellen in onCreate() @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState != null) { String savedText = savedInstanceState.getString("saved_text"); if (savedText != null) { myEditText.setText(savedText); } } } - Afhandeling van configuratiewijzigingen: Declaratie van
android:configChangesinAndroidManifest.xmlvoor gevallen waarin het niet nodig is om de Activity opnieuw te maken (minder gebruikelijk voor oriëntatiewijzigingen, maar wordt gebruikt voor andere configuratiewijzigingen). - Levenscyclus van ViewModel: Het ViewModel behoudt zijn toestand tijdens configuratiewijzigingen en wordt niet vernietigd samen met de Activity.
- Fragmenten: Correct beheer van de levenscyclus van Fragmenten.
Specifieke tests voor positiewijzigingen:
- Simulatie van rotaties op verschillende apparaten en emulators.
- Testen van gegevens opslaan en herstellen na positiewijzigingen.
- Controleren van de UI-toestand (zichtbaarheid, tekst, scroll, geselecteerde elementen).
- Testen van onderbrekingen en voortzettingen van achtergrondtaken.
- Controleren op geheugenlekken (gebruik van Android Profiler).
- Stress-testen: snelle en herhaalde positiewijzigingen.
Tools voor QA:
- Android Studio (voor debugging, logweergave, gebruik van Profiler).
- adb-commando's om rotaties te simuleren.
- Verschillende emulators en echte apparaten met verschillende resoluties en Android-versies.