Junior
Jetpack ViewModel haqqında danış.
sobes.tech Süni İntellekt
AI-dan cavab
ViewModel — Jetpack komponentidir və UI ilə əlaqəli məlumatların saxlanması və idarə olunması üçün nəzərdə tutulmuşdur. Onun əsas məqsədi — konfiqurasiya dəyişiklikləri zamanı, məsələn, ekranın döndürülməsi, və ya Activity və ya Fragment-in həyat dövrü boyunca məlumatları saxlamaq və ondan keçməkdir.
ViewModel-in xüsusiyyətləri:
- Məlumatların saxlanması: Konfiqurasiya dəyişikliklərinə və hətta Activity/Fragment-in ölümü ilə belə məlumatları bərpa edir.
- Loqikanın ayrılması: UI üçün məlumatların hazırlanması loqikasını UI-dən (Activity/Fragment) ayırır.
- Həyat dövrü ilə əlaqəli: Activity və ya Fragment-in həyat dövrü ilə əlaqəlidir.
- Yaddaş sızmalarının qarşısını alır: View, Lifecycle və ya Activity/Fragment-ə birbaşa istinad etmir, bu da yaddaş sızmalarını qarşısını alır.
İstifadəsi:
-
ViewModel-dən irəli gələn sinif yaradın.class MyViewModel : ViewModel() { private val _data = MutableLiveData<String>() val data: LiveData<String> = _data init { // Məlumatların ilkinləşdirilməsi } fun fetchData() { // Məlumatların yüklənməsi loqikası _data.value = "Yüklənmiş məlumatlar" } override fun onCleared() { // Resursların təmizlənməsi super.onCleared() } } -
Activity və ya Fragment-də ViewModel nümunəsini alın.
class MyActivity : AppCompatActivity() { private lateinit var viewModel: MyViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) viewModel = ViewModelProvider(this).get(MyViewModel::class.java) viewModel.data.observe(this, Observer { newData -> // UI-ni yeniləyin }) viewModel.fetchData() } } -
ViewModelProvider.Factoryistifadə edərək, asılılıqları olan ViewModel nümunələrini yaradın.class MyViewModel(private val repository: MyRepository) : ViewModel() { // ... } class MyViewModelFactory(private val repository: MyRepository) : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { if (modelClass.isAssignableFrom(MyViewModel::class.java)) { @Suppress("UNCHECKED_CAST") return MyViewModel(repository) as T } throw IllegalArgumentException("Naməlum ViewModel sinfi") } } // Activity/Fragment-də // val repository = MyRepository() // Asılılıq injeksiyası // viewModel = ViewModelProvider(this, MyViewModelFactory(repository)).get(MyViewModel::class.java)
onSaveInstanceState() ilə müqayisə:
| Xüsusiyyət | ViewModel | onSaveInstanceState() |
|---|---|---|
| Konfiqurasiya dəyişikliklərini keçirmək | Bəli | Bəli (kiçik məlumatlar üçün) |
| Prosesin davamlılığı | Yox (proses bağlandıqdan sonra məlumatlar itir) | Bəli (kiçik məlumatlar üçün) |
| Məlumatların saxlanması | Obiektlər, LiveData | Bundle (primitivlər, Serializable, Parcelable) |
| Yaddaş sızmaları | Yox (düzgün istifadə olunarsa) | Mümkündür, Activity/View-ə istinadlar saxlanarsa |
| İcra çətinliyi | Daha çətindir sadə ssenarilər üçün | Daha sadə, sadə ssenarilər üçün |
ViewModel daha dayanıqlı və asan test edilə bilən tətbiqlər yaratmağa kömək edir, UI və məlumatların işlənməsi loqikasını ayırır.