Middle
Jaká je specifika změny pozic na platformě Android?
sobes.tech AI
Odpověď od AI
Při změně pozic (například otočení obrazovky nebo jiných konfigurací) na Androidu dochází k zničení aktuální Activity a vytvoření nové.
Co se děje:
- Volají se životní cykly staré Activity:
onPause(),onStop(),onDestroy(). - Staré Activity je odstraněna z paměti.
- Vytvoří se nová Activity.
- Volají se životní cykly nové Activity:
onCreate(),onStart(),onResume().
Specifika pro QA:
- Ztráta dat: Neuložená data v polích, vybrané položky seznamu atd. mohou být ztracena, pokud není implementováno jejich uchování.
- Stav UI: Viditelnost prvků, posuvná pozice, vybrané záložky a další stav UI může být resetován na výchozí.
- Operace na pozadí: Spuštěné úlohy na pozadí (například načítání dat) mohou být přerušeny nebo nesprávně dokončeny.
- Výkon: Opakované změny konfigurace mohou zpomalit aplikaci kvůli neustálému znovuvytváření Activity.
- Úniky paměti: Nesprávná práce s prostředky (například Listenerové, které nejsou odregistrovány v
onDestroy()) může vést k únikům paměti.
Jak to řeší vývojáři (a co by měl nejdříve zkontrolovat QA):
- Uložení stavu: Použití
onSaveInstanceState(),onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).// Příklad uložení dat v `onSaveInstanceState()` @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); outState.putString("saved_text", myEditText.getText().toString()); }// Příklad obnovení dat 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); } } } - Řešení změn konfigurace: Deklarace
android:configChangesvAndroidManifest.xmlpro případy, kdy není potřeba znovuvytváření Activity (méně běžný scénář, ale používá se pro jiné změny konfigurace). - Životní cyklus ViewModel: ViewModel si zachovává svůj stav při změně konfigurace a není zničen spolu s Activity.
- Fragmenty: Správné řízení životního cyklu Fragmentů.
Testování změny pozic:
- Simulace otáčení obrazovky na různých zařízeních a emulátorech.
- Testování uložení a obnovení dat po změně pozice.
- Kontrola stavu UI (viditelnost, text, posuv, vybrané prvky).
- Testování přerušení/pokračování operací na pozadí.
- Kontrola úniků paměti (pomocí Android Profiler).
- Stress testování: opakované rychlé změny pozice.
Nástroje pro QA:
- Android Studio (pro ladění, prohlížení logů, použití Profileru).
- adb příkazy pro simulaci otáčení.
- Různé emulátory a skutečná zařízení s různými rozlišeními a verzemi Androidu.