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