Sobes.tech
Middle

Jaka jest specyfika zmiany pozycji na platformie Android?

sobes.tech AI

Odpowiedź od AI

Zmiana pozycji (obrót ekranu lub inne zmiany konfiguracji) na Androidzie powoduje zniszczenie bieżącej Activity i utworzenie nowej.

Co się dzieje:

  • Wywoływane są cykle życia starej Activity: onPause(), onStop(), onDestroy().
  • Stara Activity jest usuwana z pamięci.
  • Tworzona jest nowa Activity.
  • Wywoływane są cykle życia nowej Activity: onCreate(), onStart(), onResume().

Specyfika dla QA:

  • Utrata danych: Nie zapisane dane w polach wejściowych, wybrane elementy list, itp., mogą zostać utracone, jeśli nie zaimplementowano ich zachowania.
  • Stan UI: Widoczność elementów, pozycja scrolla, wybrane zakładki i inne stany UI mogą zostać zresetowane do domyślnych.
  • Operacje w tle: Uruchomione zadania w tle (np. ładowanie danych) mogą zostać przerwane lub zakończyć się niepoprawnie.
  • Wydajność: Wielokrotne zmiany konfiguracji mogą spowolnić działanie aplikacji z powodu ciągłego tworzenia Activity.
  • Wycieki pamięci: Nieprawidłowa obsługa zasobów (np. nasłuchiwacze nie odsubskrybowane w onDestroy()) mogą prowadzić do wycieków pamięci.

Jak to obsługują programiści (i co QA powinno sprawdzać w pierwszej kolejności):

  • Zachowanie stanu: Użycie onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).
    // Przykład zapisywania danych w onSaveInstanceState()
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // Przykład przywracania danych w 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);
            }
        }
    }
    
  • Obsługa zmian konfiguracji: Deklaracja android:configChanges w AndroidManifest.xml dla przypadków, gdy nie jest wymagana rekreacja Activity (mniej powszechne dla zmiany orientacji, ale używane dla innych zmian konfiguracji).
  • Cykl życia ViewModel: ViewModel zachowuje swój stan podczas zmian konfiguracji i nie jest niszczony razem z Activity.
  • Fragmenty: Prawidłowe zarządzanie cyklem życia Fragmentów.

Testy specyficzne dla zmiany pozycji:

  • Symulacja obrotów na różnych urządzeniach i emulatorach.
  • Testowanie zapisywania i przywracania danych po zmianie pozycji.
  • Sprawdzanie stanu UI (widoczność, tekst, scroll, wybrane elementy).
  • Testowanie przerwań i kontynuacji zadań w tle.
  • Sprawdzanie wycieków pamięci (użycie Android Profiler).
  • Testy obciążeniowe: szybkie i powtarzające się zmiany pozycji.

Narzędzia dla QA:

  • Android Studio (do debugowania, podglądu logów, użycia Profiler).
  • komendy adb do symulacji obrotów.
  • różne emulator i rzeczywiste urządzenia z różnymi rozdzielczościami i wersjami Androida.