Middle
Aká je špecifikácia zmeny pozícií na platforme Android?
sobes.tech AI
Odpoveď od AI
Pri zmene pozícií (napríklad otočenie obrazovky alebo iné konfigurácie) na Androide sa aktuálna Aktivita zničí a vytvorí sa nová.
Čo sa deje:
- Volajú sa životné cykly starej Aktivity:
onPause(),onStop(),onDestroy(). - Stará Aktivita je odstránená z pamäte.
- Vytvorí sa nová Aktivita.
- Volajú sa životné cykly novej Aktivity:
onCreate(),onStart(),onResume().
Špecifiká pre QA:
- Strata dát: Neuložené dáta v poliach na zadávanie, vybrané položky zo zoznamu a pod. môžu byť stratené, ak nie je implementované ich zachovanie.
- Stav UI: Viditeľnosť prvkov, pozícia posunu, vybrané záložky a iné stavy UI môžu byť resetované na predvolené.
- Operácie na pozadí: Spustené úlohy na pozadí (napríklad načítanie dát) môžu byť prerušené alebo nesprávne ukončené.
- Výkon: Opakované zmeny konfigurácie môžu spomaliť aplikáciu kvôli neustálemu znovuvytváraniu Activity.
- Úniky pamäte: Nesprávna práca s prostriedkami (napríklad Listener-ami, ktoré nie sú odhlásené v
onDestroy()) môže viesť k únikom pamäte.
Ako to riešia vývojári (a čo by mal QA najskôr skontrolovať):
- Uloženie stavu: Použitie
onSaveInstanceState(),onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).// Príklad uloženia dát v `onSaveInstanceState()` @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putString("saved_text", myEditText.getText().toString()); }// Príklad obnovenia dát v `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); } } } - Riešenie zmien konfigurácie: Deklarácia
android:configChangesvAndroidManifest.xmlpre prípady, keď nie je potrebné znovuvytváranie Activity (menej bežné, ale používa sa pre iné zmeny konfigurácie). - Životný cyklus ViewModel: ViewModel si zachováva svoj stav pri zmene konfigurácie a nie je zničený spolu s Activity.
- Fragmenty: Správne riadenie životného cyklu Fragmentov.
Testovanie zmien pozícií:
- Simulácia otáčania obrazovky na rôznych zariadeniach a emulátoroch.
- Testovanie uloženia a obnovenia dát po zmene pozície.
- Kontrola stavu UI (viditeľnosť, text, posun, vybrané prvky).
- Testovanie prerušenia/pokračovania pozadových úloh.
- Kontrola únikov pamäte (použitie Android Profiler).
- Stress testovanie: opakované rýchle zmeny pozície.
Nástroje pre QA:
- Android Studio (pre ladenie, prehliadanie logov, použitie Profileru).
- adb príkazy na simuláciu otáčania.
- Rôzne emulátory a skutočné zariadenia s rôznymi rozlíšeniami a verziami Androidu.