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.