Az esemény előfizetési mechanizmusa az MVVMCross -ban, elsősorban az „ImvxMessenger” interfészen keresztül, a szálkezelést kezeli azáltal, hogy számos lehetőséget kínál az üzenetek kézbesítésére az előfizetők számára. Ez lehetővé teszi a fejlesztők számára, hogy az alkalmazásuk konkrét követelményei alapján kezeljék a szálakat.
előfizetési módszerek
Az MVVMCross három fő módszert kínál az üzenetek feliratkozására, mindegyik eltérő menetes következményekkel jár:
1. Feliratkozás: Ez a módszer üzeneteket szállít közvetlenül a szálon, ahol közzéteszik. Ez a legalacsonyabb feldolgozással rendelkezik, mivel az üzeneteket szinkronban fogadják. Ennek ellenére gondos mérlegelést igényel annak a szálnak, amelyen az üzenetkezelő végrehajtja. Ha a kezelőnek kölcsönhatásba kell lépnie az UI -val, ellenőrizze, hogy az UI szálon fut; Ellenkező esetben lehet, hogy nem tudja közvetlenül frissíteni az UI elemeket.
2. előfizetés: ez a módszer biztosítja, hogy az üzeneteket a fő felhasználói felület fő szálához rendezzék. Ideális az üzenetkezelők számára, akiknek felhasználói felületekkel kapcsolatos feladatokat kell elvégezniük, mivel garantálja, hogy a kezelő végrehajtja a felhasználói felület szálat. Ez elengedhetetlen az UI elemek frissítéséhez, mivel a legtöbb felhasználói felület keretrendszer megköveteli, hogy a felhasználói felület frissítései a fő szálon megjelenjenek.
3. előfizetés -ThreadPoolThread: Az üzenetek sorba állnak a szálkészlet szálán történő feldolgozáshoz. Ez a megközelítés alkalmas erőforrás-igényes feladatokhoz, amelyek nem akadályozhatják meg az UI-t vagy az üzenetkiadóot. Biztosítja az aszinkron feldolgozást, még akkor is, ha az üzenetet egy meglévő szálkészlet -szálból teszik közzé.
szálkezelési szempontok
Előfizetési módszer kiválasztásakor vegye figyelembe a következőket:
- UI frissítések: Ha az üzenetkezelőnek frissítenie kell az UI elemeket, használja az „előfizetés -emainthread” -ot. Ez biztosítja, hogy az UI frissítései a megfelelő szálon forduljanak elő.
-Erőforrás-igényes feladatok: Az erőforrás-igényes vagy nem szabad blokkolni az UI-t, használja az „előfizetőpoolpoolThread” használatát. Ez tartja az UI -t reagálva, miközben aszinkron módon kezeli a feladatot.
- Szinkronfeldolgozás: Ha szinkron módon feldolgozható üzenetekre van szüksége, és tisztában van azzal a szálral, amelyen közzéteszik, akkor használja az alapvető „előfizetési” módszert.
További paraméterek
Az MVVMCross összes előfizetési módszere két további paramétert tesz lehetővé:
- MvxReference: Ez a paraméter meghatározza, hogy az előfizetésnek gyenge vagy erős referenciát kell -e használni. A gyenge referenciák (`mvxReference.weak`) lehetővé teszik a hulladékgyűjtőnek, hogy eltávolítsa az előfizetést, ha az előfizető már nem hivatkozik, míg az erős referenciák (` mvxreference.strong`) megakadályozzák ezt, biztosítva az előfizetés aktív maradványát, amíg kifejezetten fel nem írják.
- Címke: Opcionális karakterlánccímke biztosítható az előfizetések kategorizálásához. Ez hasznos több előfizetés kezelésére vagy szűrési célokra.
Összefoglalva: az MVVMCross esemény előfizetési mechanizmusa rugalmas szálkezelési lehetőségeket kínál, lehetővé téve a fejlesztők számára, hogy az üzenetek kézbesítését az alkalmazási igényeik alapján választják ki. Ez a rugalmasság elengedhetetlen a reagáló UI -k fenntartásához és a háttérfeladatok hatékony kezeléséhez.
Idézetek:[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-n-to-use-ouse-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-pplications
[7] https://docs.prismlibrary.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