Le mécanisme d'abonnement de l'événement dans MVVMCross, principalement via l'interface `IMVXMessenger», gère la gestion des threads en offrant plusieurs options sur la façon dont les messages sont livrés aux abonnés. Cela permet aux développeurs de gérer le filetage en fonction des exigences spécifiques de leur application.
Méthodes d'abonnement
MVVMCross propose trois méthodes principales pour s'abonner aux messages, chacun avec des implications de threads différentes:
1. Abonnez-vous: cette méthode fournit des messages directement sur le fil où ils sont publiés. Il a les frais généraux de traitement les plus bas car les messages sont reçus de manière synchrone. Cependant, cela nécessite une attention particulière au fil sur lequel le gestionnaire de messages s'exécutera. Si le gestionnaire doit interagir avec l'interface utilisateur, assurez-vous qu'il fonctionne sur le fil d'interface utilisateur; Sinon, il pourrait ne pas être en mesure de mettre à jour directement les éléments d'interface utilisateur.
2. Il est idéal pour les gestionnaires de messages qui doivent effectuer des tâches liées à l'interface utilisateur, car il garantit que le gestionnaire s'exécutera sur le fil d'interface utilisateur. Ceci est crucial pour la mise à jour des éléments d'interface utilisateur car la plupart des cadres d'interface utilisateur nécessitent des mises à jour de l'interface utilisateur sur le fil principal.
3. Cette approche convient aux tâches à forte intensité de ressources qui ne devraient pas bloquer l'interface utilisateur ou l'éditeur de messages. Il assure un traitement asynchrone, même si le message est publié à partir d'un fil de pool de threads existant.
Considérations de gestion de threads
Lors du choix d'une méthode d'abonnement, considérez ce qui suit:
- Mises à jour de l'interface utilisateur: si votre gestionnaire de messages doit mettre à jour les éléments d'interface utilisateur, utilisez `abonceoneNMainThread '. Cela garantit que les mises à jour de l'interface utilisateur se produisent sur le fil correct.
- Tâches à forte intensité de ressources: Pour les tâches qui sont à forte intensité de ressources ou ne doivent pas bloquer l'interface utilisateur, utilisez `AbonnedOnThreadPoolThread '. Cela maintient l'interface utilisateur réactive lors de la gestion de la tâche de manière asynchrone.
- Traitement synchrone: Si vous avez besoin de messages pour être traités de manière synchrone et que vous êtes conscient du fil sur lequel ils seront publiés, utilisez la méthode de base `abonnez-vous».
Paramètres supplémentaires
Toutes les méthodes d'abonnement dans MVVMCROSS permettent deux paramètres supplémentaires:
- MvxReference: Ce paramètre spécifie si l'abonnement doit utiliser une référence faible ou forte. Les références faibles (`mvxReference.weak`) permettent au collecteur des ordures de supprimer l'abonnement si l'abonné n'est plus référencé, tandis que de fortes références (` mvxreference.strong`) empêchent cela, garantissant que l'abonnement reste actif jusqu'à ce qu'il soit explicitement inscrit.
- Tag: une balise de chaîne facultative peut être fournie pour catégoriser les abonnements. Ceci est utile pour gérer plusieurs abonnements ou à des fins de filtrage.
En résumé, le mécanisme d'abonnement à l'événement de MVVMCross offre des options de gestion de threads flexibles, permettant aux développeurs de choisir la façon dont les messages sont livrés en fonction de leurs besoins d'application spécifiques. Cette flexibilité est cruciale pour maintenir des UIS réactives et gérer efficacement les tâches de fond.
Citations:[1] https://www.mvvmcross.com/documentation/plugins/messenger
[2] https://www.mvvmcross.com/mvvmcross-4.2/
[3] https://stackoverflow.com/questions/18465927/advice-on-where-and-when-to-use-observablecollection-in-mvvmcross
[4] https://www.youtube.com/watch?v=hqdvrwwzkik
[5] https://www.mvvmcross.com/documentation/fundamentals/testing
[6] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/april/mvvm-multithreading-and-dispatching-in-mvvm-applications
[7] https://docs.primlibrary.com/docs/event-aggregator.html
[8] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[9] https://stackoverflow.com/questions/17324650/mvvmcross-multithreading-ins
[10] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle