Sobes.tech
Middle

Kokia yra pozicijų keitimo ypatybė Android platformoje?

sobes.tech AI

Atsakymas iš AI

Pakeitus pozicijas (pvz., ekrano pasukimas ar kitos konfigūracijos pakeitimas) Android'e dabartinė Activity yra sunaikinama ir sukuriama nauja.

Kas vyksta:

  • Iškviečiami seno Activity gyvybės ciklai: onPause(), onStop(), onDestroy().
  • Seno Activity atlaisvinama iš atminties.
  • Sukuriama nauja Activity.
  • Naujo Activity gyvybės ciklai iškviečiami: onCreate(), onStart(), onResume().

QA specifika:

  • Duomenų praradimas: Nesaistomi duomenys įvedimo laukuose, pasirinkti sąrašo elementai ir kt. gali būti prarasti, jei jų išsaugojimas nėra įgyvendintas.
  • UI būklė: Elementų matomumas, slinkimo pozicija, pasirinktos kortelės ir kita UI būsena gali būti atstatyta į numatytąją.
  • Fono operacijos: Pradėtos foninės užduotys (pvz., duomenų įkėlimas) gali būti nutrauktos arba netinkamai užbaigtos.
  • Veikimas: Dažnas konfigūracijos keitimas gali sulėtinti programą dėl nuolatinio Activity perkūrimo.
  • Atminties nutekėjimas: Netinkamas išteklių valdymas (pvz., Listener'iai, kurie nėra atšaukti onDestroy()) gali sukelti atminties nutekėjimą.

Kaip tai tvarko kūrėjai (ir ką pirmiausia turi patikrinti QA):

  • Būsenos išsaugojimas: Naudojant onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC).
    // Duomenų išsaugojimo pavyzdys `onSaveInstanceState()`
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // Duomenų atkūrimo pavyzdys `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);
            }
        }
    }
    
  • Konfigūracijų keitimų valdymas: android:configChanges deklaravimas AndroidManifest.xml faile, kai nereikia Activity iš naujo kurti (mažiau paplitęs scenarijus, bet naudojamas kitų konfigūracijų pakeitimams).
  • ViewModel gyvavimo ciklas: ViewModel išlaiko savo būseną konfigūracijų keitimo metu ir nėra sunaikinamas kartu su Activity.
  • Fragmentų valdymas: Tinkamas Fragmentų gyvavimo ciklo valdymas.

Testavimas pozicijų keitimo:

  • Ekrano pasukimo simuliacija skirtinguose įrenginiuose ir emuliatoriuose.
  • Duomenų išsaugojimo ir atkūrimo testai po pozicijos keitimo.
  • UI būsenos patikrinimas (matomumas, tekstas, slinkimas, pasirinkti elementai).
  • Fono užduočių nutraukimo/atnaujinimo testai.
  • Atminties nutekėjimo patikrinimas (naudojant Android Profiler).
  • Streso testavimas: dažni greiti pozicijos keitimai.

Įrankiai QA:

  • Android Studio (derinimas, logų peržiūra, Profiler naudojimas).
  • adb komandos ekrano pasukimui simuliuoti.
  • Skirtingi emuliatoriai ir tikri įrenginiai su skirtingais raiškais ir Android versijomis.