Junior
Jetpack ViewModel haqqında danış.
sobes.tech Süni İntellekt
AI-dan cavab
ViewModel, UI ilə əlaqəli məlumatları həyat dövrünü nəzərə alaraq saxlayır və idarə edir. O, ekranın döndürülməsi, düzən dəyişiklikləri kimi konfiqurasiya dəyişikliklərindən sonra da yaşayır və məlumat itkisini qarşısını alır.
Əsas xüsusiyyətlər:
- Məlumatların saxlanması: ViewModel konfiqurasiya dəyişiklikləri zamanı məhv edilmir və UI vəziyyətini saxlayır.
- UI-dən məntiqin ayrılması: Biznes məntiqi ViewModel-ə yerləşdirilir, bu da Activity/Fragment-in sınaqdan keçirilməsini və dəstəyini asanlaşdırır.
- LiveData ilə inteqrasiya: Tez-tez məlumat dəyişikliklərini müşahidə etmək üçün LiveData ilə istifadə olunur.
İstifadə nümunəsi:
// MyViewModel.kt
import androidx.lifecycle.ViewModel
class MyViewModel : ViewModel() {
// Konfiqurasiya dəyişiklikləri zamanı saxlanmalı olan məlumatlar
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 əldə etmək
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
counterText = findViewById(R.id.counter_text)
incrementButton = findViewById(R.id.increment_button)
// ViewModel-dən məlumatları göstər
updateCounterDisplay()
incrementButton.setOnClickListener {
viewModel.counter++
updateCounterDisplay()
}
}
private fun updateCounterDisplay() {
counterText.text = viewModel.counter.toString()
}
}
Həyat dövrü: ViewModel əlaqəli Scope (məsələn, Activity) həyatda olduğu müddətcə yaşayır. Scope bitdikdə, ViewModel məhv edilir.
ViewModelProviders (indi ViewModelProvider) Kotlin-dən əvvəl ViewModel nümunəsini almaq üçün istifadə olunurdu. Kotlin-də ViewModelProvider(this).get(MyViewModel::class.java) istifadə etmək tövsiyə olunur.
ViewModel-in UI vəziyyətini saxlamaq üçün adi sinflərə nisbətən əsas üstünlükləri:
- Konfiqurasiya dəyişikliklərinə davam edir.
- Jetpack həyat dövrü çərçivəsi tərəfindən idarə olunur.
Əlavə üstünlüklər:
- Çox böyük ola bilər mürəkkəb UI məntiqi ilə.
- Yaddaş sızmalarını qarşısını almaq üçün View, Context və ya digər həyat dövrünə bağlı obyektlərə istinadlar içerməməlidir.