Mecanismul de abonament al evenimentului în MVVMcross, în principal prin interfața „IMVXMessenger”, gestionează gestionarea firului, oferind mai multe opțiuni pentru modul în care mesajele sunt livrate abonaților. Acest lucru permite dezvoltatorilor să gestioneze filetarea pe baza cerințelor specifice ale aplicației lor.
Metode de abonament
MVVMCross oferă trei metode principale pentru abonarea la mesaje, fiecare cu implicații diferite de filetare:
1. Abonați -vă: Această metodă livrează mesaje direct pe firul în care sunt publicate. Are cea mai mică procesare generală, deoarece mesajele sunt primite sincron. Cu toate acestea, necesită o examinare atentă a firului pe care se va executa manipulatorul de mesaje. Dacă manipulatorul trebuie să interacționeze cu UI, asigurați -vă că funcționează pe firul UI; În caz contrar, s -ar putea să nu poată actualiza direct elementele UI.
2. AbricareanMainThread: Această metodă asigură că mesajele sunt transmise la firul UI principal. Este ideal pentru managerii de mesaje care trebuie să efectueze sarcini legate de UI, deoarece garantează că manipulatorul va executa pe firul UI. Acest lucru este crucial pentru actualizarea elementelor UI, deoarece majoritatea cadrelor UI necesită actualizări UI pentru a apărea pe firul principal.
3. AbonareOntThreadpoolThread: Mesajele sunt în coadă pentru procesarea pe un fir de pool de fir. Această abordare este potrivită pentru sarcini intensive cu resurse care nu ar trebui să blocheze UI sau editorul de mesaje. Acesta asigură procesarea asincronă, chiar dacă mesajul este publicat dintr -un fir existent de thread.
Considerații de gestionare a firului
Atunci când alegeți o metodă de abonament, luați în considerare următoarele:
- Actualizări UI: Dacă gestionatorul dvs. de mesaje trebuie să actualizeze elementele UI, utilizați `AbonareOnMainThread`. Acest lucru asigură că actualizările UI apar pe firul corect.
-Sarcini intensive pentru resurse: Pentru sarcinile care consumă resurse sau nu ar trebui să blocheze UI, utilizați `abonareOnthreadpoolThread`. Acest lucru menține UI receptiv în timp ce gestionează sarcina asincron.
- Procesare sincronă: dacă aveți nevoie de mesaje care să fie procesate sincron și sunteți conștienți de firul pe care vor fi publicate, utilizați metoda de bază „abonare”.
Parametri suplimentari
Toate metodele de abonament din MVVMcross permit doi parametri suplimentari:
- MVXReference: Acest parametru specifică dacă abonamentul ar trebui să utilizeze o referință slabă sau puternică. Referințele slabe (`mvxreference.weak`) permit colectorului de gunoi să elimine abonamentul dacă abonatul nu mai este trimis la referire, în timp ce referințele puternice (` mvxReference.strong`) previn acest lucru, asigurându -se că abonamentul rămâne activ până la dezavantajul explicit.
- Etichetă: poate fi furnizată o etichetă de șir opțională pentru a clasifica abonamentele. Acest lucru este util pentru gestionarea mai multor abonamente sau în scopuri de filtrare.
În rezumat, mecanismul de abonament al evenimentului MVVMCross oferă opțiuni flexibile de gestionare a firului, permițând dezvoltatorilor să aleagă modul în care mesajele sunt livrate în funcție de nevoile lor specifice de aplicație. Această flexibilitate este crucială pentru menținerea UI -urilor receptive și pentru gestionarea eficientă a sarcinilor de fond.
Citări:[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-mvmcross
[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-mulithreading-and-dispatching-in-mvvm-applications
[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-mulithreading-ins
[10] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle