Sobes.tech
Junior

Nima uchun ekran burilishida faoliyat qayta yaratiladi?

sobes.tech AI

AIdan javob

Ekran aylantirilganda, qurilma konfiguratsiyasi o'zgaradi, masalan, yo'nalish. Android bu holatga javoban, kerakli o'zgarishlarni qo'llash uchun faoliyatni yo'q qiladi va qayta yaratadi, masalan, portret yoki landshaft yo'nalishiga mos keladigan layout fayllarida.

Aylantirish vaqtida faoliyatning hayot aylanishi:

  1. onPause()
  2. onStop()
  3. onDestroy()
  4. Tizim yangi faoliyat nusxasini yaratadi.
  5. onCreate()
  6. onStart()
  7. onResume()

Faoliyatni yo'q qilishdan oldin holat ma'lumotlarini saqlash uchun:

  • onSaveInstanceState(): kichik ma'lumotlarni Bundlega saqlaydi.

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("myKey", "myValue") // Ma'lumotlarni saqlash
    }
    

    onCreate() yoki onRestoreInstanceState()da tiklash:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // ...
        if (savedInstanceState != null) {
            val myValue = savedInstanceState.getString("myKey") // Ma'lumotlarni tiklash
        }
        // ...
    }
    
  • ViewModel: UI nazoratchisi (Activity/Fragment)ning hayot aylanishi davomida, konfiguratsiya o'zgarganda ham, ma'lumotlarni saqlaydi. ViewModel faoliyatning yo'q qilinishidan o'tib, holatini yo'qotmaydi.

    class MyViewModel : ViewModel() {
        var counter = 0
    }
    

    Faoliyat/fragmentda foydalanish:

    class MyActivity : AppCompatActivity() {
        private lateinit var viewModel: MyViewModel
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
            // Endi viewModel.counter aylantirilganda saqlanadi
        }
    }
    
  • Ma'lumotlarni SharedPreferences yoki ma'lumotlar bazasida saqlash uchun.

Ekran aylantirilganda faoliyatni qayta yaratmaslik uchun, faoliyat o'zi konfiguratsiya o'zgarishlarini boshqarishini e'lon qilish mumkin. Bu manifestda, <activity> tegiga configChanges="orientation|screenSize|screenLayout" atributini qo'shish orqali amalga oshiriladi:

<activity android:name=".MyActivity"
          android:configChanges="orientation|screenSize|screenLayout">
</activity>

Bu holda, faoliyatni qayta yaratish o'rniga, onConfigurationChanged() metodi chaqiriladi:

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    // Konfiguratsiya o'zgarishini qo'lda boshqarish
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // Landshaft yo'nalishi uchun mantiq
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        // Portret yo'nalishi uchun mantiq
    }
}

configChangesdan foydalanish ko'p hollarda tavsiya etilmaydi, chunki bu holatda holat va resurslarni boshqarish qiyinlashadi. Eng yaxshi yondashuv — ViewModel yordamida holat ma'lumotlarini saqlash.