Sobes.tech
Middle

Mi az Android platformán a pozíciók cseréjének sajátossága?

sobes.tech MI

Válasz az MI-től

Pozícióváltás (pl. képernyőforgatás vagy más konfigurációs változtatások) esetén az Androidon az aktuális Activity megsemmisül, és egy új jön létre.

Mi történik:

  • A régi Activity életciklusai hívódnak: onPause(), onStop(), onDestroy().
  • A régi Activity eltávolításra kerül a memóriából.
  • Egy új Activity jön létre.
  • Az új Activity életciklusai hívódnak: onCreate(), onStart(), onResume().

QA-specifikus megjegyzések:

  • Adatvesztés: A nem mentett adatok a bevitel mezőiben, listák kiválasztott elemei stb. elveszhetnek, ha nem valósítják meg azok megőrzését.
  • UI állapota: Az elemek láthatósága, görgetési pozíciók, kiválasztott lapok és más UI állapotok visszaállhatnak alapértelmezett értékekre.
  • Háttér műveletek: A háttérben futó feladatok (pl. adatbetöltés) megszakadhatnak vagy helytelenül fejeződhetnek be.
  • Teljesítmény: Többszöri konfigurációváltás lassíthatja az alkalmazást a folyamatos Activity újraalkotás miatt.
  • Memóriaszivárgás: A helytelen erőforrás-kezelés (pl. Listener-ek, amiket nem vonnak vissza az onDestroy()-ban) memóriaszivárgáshoz vezethet.

Hogyan kezelik a fejlesztők (és mit ellenőrizzen a QA):

  • Állapot mentése: onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC) használata.
    // Példa adatok mentésére az onSaveInstanceState() során
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // Példa adatok visszaállítására az onCreate() során
    @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);
            }
        }
    }
    
  • Konfigurációváltozások kezelése: android:configChanges deklarálása az AndroidManifest.xml-ben azokban az esetekben, amikor nem szükséges az Activity újraalkotása (kevésbé elterjedt, de más konfigurációs változtatásokhoz használják).
  • ViewModel életciklus: A ViewModel megőrzi az állapotát konfigurációváltáskor, és nem semmisül meg az Activity-vel együtt.
  • Fragmentek: A Fragmentek életciklusának helyes kezelése.

Speciális tesztelés a pozícióváltásra:

  • Képernyőforgatás szimulálása különböző eszközökön és emulátorokon.
  • Az adatok mentése és visszaállítása a pozícióváltás után.
  • UI állapotának ellenőrzése (láthatóság, szöveg, görgetés, kiválasztott elemek).
  • Háttér feladatok megszakítása/folytatása.
  • Memóriaszivárgás ellenőrzése (Android Profiler használatával).
  • Stressztesztelés: többszöri gyors pozícióváltás.

Eszközök a QA számára:

  • Android Studio (hibaelhárítás, logok megtekintése, Profiler használata).
  • adb parancsok a forgatások szimulálására.
  • Különböző emulátorok és valódi eszközök különböző felbontásokkal és Android verziókkal.