Sobes.tech
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:configChanges in der AndroidManifest.xml fü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.