web-dev-qa-db-fra.com

Pourquoi les observateurs ajoutés comme observeForever à LiveData doivent-ils être supprimés?

J'ai lu documentation Android LiveData que:

Vous pouvez enregistrer un observateur sans objet LifecycleOwner associé à l'aide de la méthode observeForever (Observer). Dans ce cas, l'observateur est considéré comme toujours actif et est donc toujours informé des modifications. Vous pouvez supprimer ces observateurs en appelant la méthode removeObserver (Observer).

Je crée une application en utilisant le modèle d'architecture MVVM en utilisant ViewModel et en déclarant LiveDatas dans ma classe ViewModel. À mon viewModel, j'ai défini un observeForever à un LiveData:

val password by lazy {
    MutableLiveData<String>()
}

init {
    initObservable()
}

private fun initObservable() {
    password.observeForever {
        ...
    }
}

D'après ce que j'ai compris de la documentation, je devrais supprimer l'observateur à chaque fois que la vue qui instancie le ViewModel (avec le code précédent) était détruite, non? Mais les Observateurs ne devraient-ils pas être détruits une fois la vue détruite (puisque l'instance ViewModel a été instanciée dans la vue et sera également détruite)?

6
Ana Paula

D'après ce que j'ai compris de la documentation, je devrais supprimer l'observateur à chaque fois la vue qui instancie le ViewModel

Pour y parvenir, vous devez instancier votre modèle de vue à l'intérieur de la vue (activité, fragment) et observer les données vécues comme ceci

val model = ViewModelProviders.of(this).get(MyViewModel::class.Java)
        model.getUsers().observe(this, Observer<List<User>>{ users ->
            // update UI
        })

en passant this vous liez l'observation de livesata à view's cycle de vie, donc lorsque la vue (activité, fragment) sera détruite, le modèle de vue et l'observateur seront détruits.

0
Levon Petrosyan