Junior
Jetpack ViewModel haqida gapir.
sobes.tech AI
AIdan javob
ViewModel UI bilan va uni boshqaradi, hayot aylanishini hisobga olgan holda. U konfiguratsiya o'zgarishlaridan (masalan, ekranni aylantirish, joylashuv o'zgarishi) keyin ham yashaydi va ma'lumotlarni yo'qotishni oldini oladi.
Asosiy xususiyatlar:
- Ma'lumotlarni saqlash: ViewModel konfiguratsiya o'zgarishlari davomida yo'q qilinmaydi va UI holatini saqlaydi.
- UI dan mantiqni ajratish: Biznes mantiq ViewModel ga joylashtiriladi, bu esa Activity/Fragment ning sinovdan o'tkazilishini va texnik xizmat ko'rsatishni osonlashtiradi.
- LiveData bilan integratsiya: Ko'pincha ma'lumot o'zgarishlarini kuzatish uchun LiveData bilan ishlatiladi.
Foydalanish misoli:
// MyViewModel.kt
import androidx.lifecycle.ViewModel
class MyViewModel : ViewModel() {
// Konfiguratsiya o'zgarishlari davomida saqlanishi kerak bo'lgan ma'lumotlar
var counter = 0
}
// MyActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import androidx.lifecycle.ViewModelProvider
class MyActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
private lateinit var counterText: TextView
private lateinit var incrementButton: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ViewModel ni olish
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
counterText = findViewById(R.id.counter_text)
incrementButton = findViewById(R.id.increment_button)
// ViewModel dan ma'lumotlarni ko'rsatish
updateCounterDisplay()
incrementButton.setOnClickListener {
viewModel.counter++
updateCounterDisplay()
}
}
private fun updateCounterDisplay() {
counterText.text = viewModel.counter.toString()
}
}
Hayot davomiyligi: ViewModel unga bog'langan Scope (masalan, Activity) yashash davomida yashaydi. Scope tugagach, ViewModel yo'q qilinadi.
ViewModelProviders (hozirda ViewModelProvider) Kotlindan oldin ViewModel nusxasini olish uchun ishlatilgan. Kotlinda ViewModelProvider(this).get(MyViewModel::class.java) tavsiya etiladi.
ViewModel ning oddiy sinflarga nisbatan asosiy afzalliklari:
- Konfiguratsiya o'zgarishlariga chidamli.
- Jetpack ning hayot aylanishi ramkasi tomonidan boshqariladi.
Kamchiliklar:
- Murakkab UI mantiqi bilan juda katta bo'lishi mumkin.
- Xotira oqib ketmasligi uchun View, Context yoki boshqa hayot aylanishiga bog'liq obyektlarga havolalarni o'z ichiga olmang.