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:configChangeswAndroidManifest.xmldla 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.