2

Il semble que MutableLiveData diffère de LiveData seulement en rendant les méthodes setValue() et postValue() publiques, alors qu'en LiveData elles sont protégées.Pourquoi existe-t-il une sous-classe MutableLiveData distincte de LiveData?

Quelles sont les raisons de créer une classe distincte pour cette modification et ne pas simplement définir ces méthodes comme publiques dans le LiveData lui-même?

En général, une telle forme d'héritage (augmentant la visibilité de certaines méthodes étant le seul changement) est une pratique bien connue et quels sont les scénarios où cela peut être utile (en supposant que nous ayons accès à tout le code) ?

+1

C'est une décision de conception. 'LiveData' est immuable, car le client ne peut pas changer l'état interne, donc thread-safe – Blackbelt

Répondre

4

En LiveData - Android Developer Documentation, vous pouvez voir que pour LiveData, setValue() & postValue() méthodes ne sont pas publiques.

considérant que, MutableLiveData - Android Developer Documentation, vous pouvez voir que, MutableLiveData étend LiveData en interne et aussi les deux méthodes magiques de LiveData est publiquement disponibles dans ce domaine et ils sont setValue() & postValue().

setValue(): définir la valeur et envoyer la valeur à tous les observateurs actifs, doit être appelée à partir de thread principal.

postValue(): poster une tâche à thread principal pour remplacer la valeur fixée par setValue(), doit être appelé à partir de fils de fond .

Ainsi, LiveData est immutable. MutableLiveData est LiveData qui est mutable & thread-safe.