Sobes.tech
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.