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:configChangesdeklaravimasAndroidManifest.xmlfaile, 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.