Sobes.tech
Junior

Jetpack ViewModel hakkında bana anlat.

sobes.tech yapay zeka

AI'dan gelen yanıt

ViewModel, UI ile ilişkili verileri yaşam döngüsünü dikkate alarak depolar ve yönetir. Konfigürasyon değişikliklerinden (örneğin ekran döndürme, düzen değişiklikleri) sonra bile hayatta kalır ve veri kaybını önler.

Ana özellikler:

  • Veri saklama: ViewModel, konfigürasyon değişiklikleri sırasında yok edilmez ve UI durumunu korur.
  • İş mantığı ve UI ayrımı: İş mantığı ViewModel'e yerleştirilir, bu da Activity/Fragment'in test edilmesini ve bakımını kolaylaştırır.
  • LiveData ile entegrasyon: Sık sık veri değişikliklerini gözlemlemek için LiveData ile kullanılır.

Kullanım örneği:

// MyViewModel.kt
import androidx.lifecycle.ViewModel

class MyViewModel : ViewModel() {
    // Konfigürasyon değişiklikleri sırasında saklanması gereken veriler
    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 alınması
        viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

        counterText = findViewById(R.id.counter_text)
        incrementButton = findViewById(R.id.increment_button)

        // ViewModel'den verileri göster
        updateCounterDisplay()

        incrementButton.setOnClickListener {
            viewModel.counter++
            updateCounterDisplay()
        }
    }

    private fun updateCounterDisplay() {
        counterText.text = viewModel.counter.toString()
    }
}

Ömür: ViewModel, bağlı olduğu Scope (örneğin, Activity) hayatta olduğu sürece yaşar. Scope sona erdiğinde, ViewModel yok edilir.

ViewModelProviders (şimdi ViewModelProvider), Kotlin'den önce ViewModel örneği almak için kullanılırdı. Kotlin'de, ViewModelProvider(this).get(MyViewModel::class.java) kullanılması önerilir.

ViewModel'in geleneksel sınıflara göre temel avantajları:

  • Konfigürasyon değişikliklerine dayanıklıdır.
  • Jetpack yaşam döngüsü çerçevesi tarafından yönetilir.

Dezavantajlar:

  • Karmaşık UI mantığıyla çok büyük hale gelebilir.
  • Bellek sızıntılarını önlemek için View, Context veya yaşam döngüsüne bağlı diğer nesnelere referans içermemelidir.