Sobes.tech
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:configChanges v AndroidManifest.xml pro 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.