Sobes.tech
Middle

Android platformasida pozitsiyalarni o'zgartirishning o'ziga xosligi nima?

sobes.tech AI

AIdan javob

Androidda pozisyon o'zgarishi (ekranni aylantirish yoki boshqa konfiguratsiya o'zgarishlari) paytida joriy Activity yo'q qilinadi va yangi Activity yaratiladi.

Nima bo'ladi:

  • Eski Activity ning hayot aylanishi chaqiriladi: onPause(), onStop(), onDestroy().
  • Eski Activity xotiradan olib tashlanadi.
  • Yangi Activity yaratiladi.
  • Yangi Activity ning hayot aylanishi chaqiriladi: onCreate(), onStart(), onResume().

QA uchun xususiyatlar:

  • Ma'lumotlarni yo'qotish: Saqlanmagan ma'lumotlar (kiritish maydonlaridagi, ro'yxat elementlaridagi va boshqalar) saqlanmasa, yo'qolishi mumkin.
  • UI holati: Elementlarning ko'rinishi, skroll pozitsiyasi, tanlangan tablar va boshqa UI holatlari default holatga qaytarilishi mumkin.
  • Orqa fon operatsiyalari: Ishga tushirilgan orqa fon vazifalari (masalan, ma'lumotlarni yuklash) to'xtatilishi yoki noto'g'ri yakunlanishi mumkin.
  • Performans: Bir nechta konfiguratsiya o'zgarishi ilovaning sekinlashiga olib kelishi mumkin, chunki Activity doimiy ravishda qayta yaratiladi.
  • Xotira oqibati: Resurslar bilan noto'g'ri ishlash (masalan, onDestroy() da yozilmagan Listenerlar) xotira oqibatiga olib kelishi mumkin.

Qanday qilib ishlab chiquvchilar bilan boshqariladi (va QA birinchi nima tekshirmog'i kerak):

  • Holatni saqlash: onSaveInstanceState(), onRestoreInstanceState(), ViewModel, Android Architecture Components (AAC) dan foydalanish.
    // `onSaveInstanceState()` da ma'lumotlarni saqlash misoli
    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("saved_text", myEditText.getText().toString());
    }
    
    // `onCreate()` da ma'lumotlarni tiklash misoli
    @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);
            }
        }
    }
    
  • Konfiguratsiya o'zgarishlarini boshqarish: android:configChanges ni AndroidManifest.xml da e'lon qilish, agar Activity ni qayta yaratmaslik kerak bo'lsa (kamroq keng tarqalgan, lekin boshqa konfiguratsiya o'zgarishlari uchun ishlatiladi).
  • ViewModel ning hayot aylanishi: ViewModel konfiguratsiya o'zgarishlari davomida holatini saqlaydi va Activity bilan birga yo'q qilinmaydi.
  • Fragmentlar: Fragmentlarning hayot aylanishini to'g'ri boshqarish.

Pozitsiya o'zgarishi uchun maxsus testlar:

  • Turli qurilmalarda va emulyatorlarda ekranlarni aylantirishni simulyatsiya qilish.
  • Pozitsiya o'zgarishidan so'ng ma'lumotlarni saqlash va tiklashni test qilish.
  • UI holatini tekshirish (ko'rinish, matn, skroll, tanlangan elementlar).
  • Orqa fon vazifalarini to'xtatish va davom ettirishni test qilish.
  • Xotira oqibatini tekshirish (Android Profiler dan foydalanish).
  • Stress-testlar: tez va takroriy pozitsiya o'zgarishlari.

QA uchun vositalar:

  • Android Studio (xatoliklarni aniqlash, loglarni ko'rish, Profiler dan foydalanish).
  • adb komandalarini ekranlarni aylantirishni simulyatsiya qilish uchun.
  • turli emulyatorlar va haqiqiy qurilmalar, turli ekran o'lchamlari va Android versiyalari bilan.