Middle
Was ist die Spezifik der Positionsänderung auf der Android-Plattform?
sobes.tech KI
Antwort von AI
Bei Positionsänderungen (Bildschirmrotation oder andere Konfigurationsänderungen) auf Android wird die aktuelle Activity zerstört und eine neue erstellt.
Was passiert:
- Die Lebenszyklusmethoden der alten Activity werden aufgerufen:
onPause(),onStop(),onDestroy(). - Die alte Activity wird aus dem Speicher entfernt.
- Eine neue Activity wird erstellt.
- Die Lebenszyklusmethoden der neuen Activity werden aufgerufen:
onCreate(),onStart(),onResume().
Spezifika für QA:
- Datenverlust: Nicht gespeicherte Daten in Eingabefeldern, ausgewählte Listenelemente usw. können verloren gehen, wenn ihre Speicherung nicht implementiert ist.
- UI-Zustand: Sichtbarkeit der Elemente, Scroll-Positionen, ausgewählte Tabs und andere UI-Zustände können auf den Standardzustand zurückgesetzt werden.
- Hintergrundoperationen: Laufende Hintergrundaufgaben (z.B. Datenladen) können unterbrochen oder fehlerhaft beendet werden.
- Leistung: Mehrfache Konfigurationsänderungen können die App verlangsamen, da die Activity ständig neu erstellt wird.
- Speicherlecks: Falscher Umgang mit Ressourcen (z.B. Listener, die nicht in
onDestroy()abgemeldet werden) kann zu Speicherlecks führen.
Wie Entwickler damit umgehen (und was QA zuerst prüfen sollte):
- Zustand speichern: Verwendung von
onSaveInstanceState(),onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).// Beispiel zum Speichern von Daten in onSaveInstanceState() @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putString("saved_text", myEditText.getText().toString()); }// Beispiel zum Wiederherstellen von Daten 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); } } } - Umgang mit Konfigurationsänderungen: Deklaration von
android:configChangesin derAndroidManifest.xmlfür Fälle, in denen die Neuerstellung der Activity vermieden werden soll (weniger üblich bei Orientierungswechsel, aber bei anderen Konfigurationsänderungen genutzt). - Lebenszyklus des ViewModel: Das ViewModel behält seinen Zustand bei Konfigurationsänderungen und wird nicht zusammen mit der Activity zerstört.
- Fragments: Richtige Verwaltung des Lebenszyklus von Fragments.
Spezifische Tests für Positionswechsel:
- Simulation von Drehungen auf verschiedenen Geräten und Emulatoren.
- Testen des Speicherns und Wiederherstellens von Daten nach Positionswechsel.
- Überprüfung des UI-Zustands (Sichtbarkeit, Text, Scroll, ausgewählte Elemente).
- Testen von Unterbrechungen und Fortsetzungen von Hintergrundaufgaben.
- Überprüfung auf Speicherlecks (Verwendung des Android Profilers).
- Stresstests: Mehrfache schnelle Positionswechsel.
Werkzeuge für QA:
- Android Studio (zum Debuggen, Log-Ansicht, Profiler-Nutzung).
- adb-Befehle zur Simulation von Rotationen.
- Verschiedene Emulatoren und echte Geräte mit unterschiedlichen Auflösungen und Android-Versionen.