Categories: Android

Assurez-vous de mettre à jour votre StateFlow en toute sécurité dans Kotlin !

 

La photo de versionÂ

Bonjour, je viens à vous aujourd’hui avec un conseil rapide sur la façon de mettre à jour votre ÉtatFlow en toute sécurité à Kotlin.

Récemment une nouvelle version de Kotlin Cortinas La bibliothèque a été publiée avec de nouvelles fonctions d’extension pour vous aider avec ÉtatFlow mises à jour. Tout a commencé avec ce problème :

Voyons de quoi il s’agit…

si c’est ta première fois avec ÉtatFlow et vous voulez en savoir plus à son sujet et comment il se rapporte aux autres, comment Flux partagé ou alors données en direct, vous pouvez lire mon article à ce sujet ici :

ÉtatFlow il est principalement utilisé pour gérer les mises à jour d’état et d’état. Peut être utilisé, par exemple, sur Android Voir Modèle d’exposer l’État à leurs opinions.

Regardons un exemple :

Comment récupérer ce statut maintenant sur Fragment par exemple? Toutes les informations peuvent être trouvées dans mon article que j’ai mentionné précédemment 🙂

Eh bien, c’est assez facile puisque nous utilisons une classe de données. Nous pouvons simplement utiliser copie de alors:

_uiState.value = _uiState.value.copy(title = "Something")

Simple, non ? Mais il faut faire attention…

Donc quel est le problème? Bien que le code soit très simple, il y a quelque chose que vous devez savoir : CONCURRENCE.

si le temps entre copie de pleine fonction et le StateFlow’s nouvelle valeur est émise, un autre thread essaie de mettre à jour le ÉtatFlow – en utilisant copie de et mettre à jour l’une des propriétés que le copie de ne change pas – nous pouvons nous retrouver avec des résultats auxquels nous ne nous attendions pas.

Comment résolvons-nous ce problème? Utiliser de bonnes nouveautés de Kotlin Cortinas pour MutableStateFlow.

Je parle de ces trois méthodes :

Ils utilisent tous un paramètre de fonction qui renvoie le nouvel état qui sera émis.

Voyons un instant ce qu’il y a dans la méthode de mise à jour :

public inline fun <T> MutableStateFlow<T>.update(function: (T) -> T) {
while (true) {
val prevValue = value
val nextValue = function(prevValue)
if (compareAndSet(prevValue, nextValue)) {
return
}
}
}

Comme on peut le voir, une fonction est passée en paramètre et est appliquée au courant ÉtatFlowvaleur de. Puis comparer Et Définir La fonction est utilisée pour déterminer si la valeur a changé – par exemple, par un autre thread. si comparer Et Définir renvoie false afin que la boucle while s’exécute jusqu’à ce qu’il soit possible de mettre à jour l’état.

Alors comment utiliser ? Voyons un exemple EN SÉCURITÉ Mettez à jour maintenant:

_uiState.update { it.copy(title = "Something") }

C’est ça! Cela nous assure que l’état peut être changé. Avec la sécurité!

AdminHacker

Recent Posts

Capacités, combinaisons de personnages et plus

Feu gratuit introduit de nouveaux personnages avec une compétence distincte après chaque mise à jour…

2 ans ago

COD Mobile taquine un crossover avec le légendaire rappeur Snoop Dogg

Dans une étrange tournure des événements qui semblerait insensée à quiconque vivait il y a…

2 ans ago

Les messages de Google suscitent enfin des réactions des iPhones et plus encore

  Google déploie aujourd'hui la mise à jour très attendue qui permettra aux utilisateurs de…

2 ans ago

Concours de design GT7 annoncé

  Pour célébrer le lancement de Gran Turismo 7, nous nous sommes associés à des…

2 ans ago

Apple annonce un plan de retour au bureau pour les employés d’entreprise, avec un modèle hybride à partir du 11 avril

  Une vue de la Space Needle depuis l'immeuble de bureaux d'Apple à Seattle au…

2 ans ago

Lots Tundra Tracker épuisés en seulement 3 minutes hier

  Tundra Tracker, une rondelle de suivi SteamVR née d'un Kickstarter réussi l'année dernière, a…

2 ans ago