Sobes.tech
Middle

Koja je specifičnost promene pozicija na Android platformi?

sobes.tech АИ

Одговор од АИ

Prilikom promene pozicija (npr. rotacija ekrana ili drugih konfiguracionih promena) na Androidu, trenutna Aktivnost se uništava i kreira se nova.

Šta se dešava:

  • Pozivaju se životni ciklusi stare Aktivnosti: onPause(), onStop(), onDestroy().
  • Stara Aktivnost se uklanja iz memorije.
  • Kreira se nova Aktivnost.
  • Pozivaju se životni ciklusi nove Aktivnosti: onCreate(), onStart(), onResume().

Specifičnosti za QA:

  • Gubitak podataka: Neposredni podaci u poljima za unos, izabrani elementi liste itd. mogu biti izgubljeni ako njihovo čuvanje nije implementirano.
  • Stanje UI: Vidljivost elemenata, pozicija skrolovanja, izabrane kartice i drugo stanje UI može biti resetovano na podrazumevano.
  • Operacije u pozadini: Pokrenute pozadinske zadatke (npr. učitavanje podataka) mogu biti prekinute ili nepravilno završene.
  • Performanse: Česta promena konfiguracije može usporiti aplikaciju zbog stalnog ponovnog kreiranja Aktivnosti.
  • Curenje memorije: Neispravno upravljanje resursima (npr. Listener-i, koji nisu odjavljeni u onDestroy()) može dovesti do curenja memorije.

Kako to rešavaju programeri (i šta QA treba prvo da proveri):

  • Čuvanje stanja: Korišćenje onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).
    // Primer čuvanja podataka u `onSaveInstanceState()`
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // Primer obnavljanja podataka u `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);
            }
        }
    }
    
  • Obrada promena konfiguracije: Deklaracija android:configChanges u AndroidManifest.xml za slučajeve kada nije potrebna ponovna izgradnja Aktivnosti (manje uobičajeno, ali se koristi za druge promene konfiguracije).
  • Životni ciklus ViewModel: ViewModel čuva svoje stanje pri promeni konfiguracije i ne uništava se zajedno sa Aktivnošću.
  • Fragmenti: Ispravno upravljanje životnim ciklusom Fragmenta.

Testiranje promene pozicija:

  • Simulacija rotacije ekrana na različitim uređajima i emulatorima.
  • Testiranje čuvanja i obnavljanja podataka nakon promene pozicije.
  • Provera stanja UI (vidljivost, tekst, skrol, izabrani elementi).
  • Testiranje prekida/nastavka pozadinskih zadataka.
  • Provera curenja memorije (korišćenjem Android Profiler-a).
  • Stress testiranje: višestruke brze promene pozicije.

Alati za QA:

  • Android Studio (za debugovanje, pregled logova, korišćenje Profiler-a).
  • adb komande za simulaciju rotacije.
  • Različiti emulatori i pravi uređaji sa različitim rezolucijama i verzijama Androida.