Parlez-moi de Jetpack ViewModel.
sobes.tech IA
Réponse de l'IA
ViewModel stocke et gère les données liées à l'interface utilisateur en tenant compte du cycle de vie. Il survit aux changements de configuration (rotation d'écran, changements de disposition), évitant ainsi la perte de données.
Caractéristiques clés:
- Sauvegarde des données: Le ViewModel n'est pas détruit lors des changements de configuration, conservant l'état de l'UI.
- Séparation de la logique et de l'UI: La logique métier est placée dans le ViewModel, ce qui facilite les tests et la maintenance de l'Activity/Fragment.
- Intégration avec LiveData: Souvent utilisé avec LiveData pour observer les changements de données.
Exemple d'utilisation:
// MyViewModel.kt
import androidx.lifecycle.ViewModel
class MyViewModel : ViewModel() {
// Données à conserver lors des changements de configuration
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)
// Obtention du ViewModel
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
counterText = findViewById(R.id.counter_text)
incrementButton = findViewById(R.id.increment_button)
// Affichage des données du ViewModel
updateCounterDisplay()
incrementButton.setOnClickListener {
viewModel.counter++
updateCounterDisplay()
}
}
private fun updateCounterDisplay() {
counterText.text = viewModel.counter.toString()
}
}
Durée de vie : Le ViewModel vit aussi longtemps que le Scope associé (par exemple, l'Activity) est vivant. Lors de la fin du Scope, le ViewModel est détruit.
ViewModelProviders (maintenant ViewModelProvider) était utilisé pour obtenir une instance de ViewModel avant Kotlin. En Kotlin, il est recommandé d'utiliser ViewModelProvider(this).get(MyViewModel::class.java).
Principaux avantages du ViewModel par rapport aux classes normales pour stocker l'état de l'UI:
- Survive aux changements de configuration.
- Géré par le framework du cycle de vie de Jetpack.
Inconvénients:
- Peut devenir trop volumineux avec une logique UI complexe.
- Ne doit pas contenir de références à View, Context ou autres objets avec cycle de vie pour éviter les fuites de mémoire.