Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kaip įvykių prenumeratos mechanizmas MVVMCross tvarko gijų valdymą


Kaip įvykių prenumeratos mechanizmas MVVMCross tvarko gijų valdymą


Renginių prenumeratos mechanizmas „MVVMCross“, pirmiausia per „IMVXMessenger“ sąsają, tvarko gijų valdymą, pateikdama keletą parinkčių, kaip pranešimai pateikiami abonentams. Tai leidžia kūrėjams valdyti sriegį, atsižvelgiant į konkrečius jų programos reikalavimus.

prenumeratos metodai

„MVVMCross“ siūlo tris pagrindinius pranešimų prenumeravimo metodus, kurių kiekvienas turi skirtingą sriegio pasekmes:

1. Prenumeruokite: Šis metodas pateikia pranešimus tiesiogiai gijoje, kur jie skelbiami. Jis turi mažiausią apdorojimo pridėtinę išlaidą, nes pranešimai gaunami sinchroniškai. Tačiau reikia atidžiai apsvarstyti giją, kuria vyks pranešimų tvarkytojas. Jei prižiūrėtojui reikia sąveikauti su vartotojo sąsaja, įsitikinkite, kad jis veikia UI gijoje; Priešingu atveju tai gali nepavykti tiesiogiai atnaujinti vartotojo sąsajos elementų.

2. Tai idealiai tinka pranešimų tvarkytojams, kuriems reikia atlikti su UI susijusias užduotis, nes tai garantuoja, kad tvarkytojas vykdys UI giją. Tai labai svarbu atnaujinti UI elementus, nes daugumai vartotojo sąsajos sistemos reikalauja, kad pagrindinėje gijoje atsirastų vartotojo sąsajos atnaujinimai.

3. „PrenumeCenEnThreadPoolThread“: pranešimai yra eilėje apdoroti ant gijos baseino sriegio. Šis požiūris yra tinkamas daug išteklių reikalaujančioms užduotims, kurios neturėtų blokuoti vartotojo sąsajos ar pranešimų leidėjo. Tai užtikrina asinchroninį apdorojimą, net jei pranešimas bus paskelbtas iš esamo gijos baseino gijos.

gijų valdymo aspektai

Rinkdamiesi prenumeratos metodą, apsvarstykite šiuos dalykus:

- UI atnaujinimai: Jei jūsų pranešimų tvarkytojui reikia atnaujinti UI elementus, naudokite „prenumeCenMainThread“. Tai užtikrina, kad UI atnaujinimai įvyktų teisingoje gijoje.

-INKTINGOS ŠALTINIŲ UŽSAKYMAI: užduotims, kurios reikalauja daug išteklių, arba neturėtų blokuoti vartotojo sąsajos, naudokite „prenumepreThreadPoolThread“. Tai palaiko vartotojo sąsają, o užduotį atliks asinchroniškai.

- Sinchroninis apdorojimas: Jei jums reikia pranešimų, kad būtų galima apdoroti sinchroniškai, ir žinote giją, kuria jie bus paskelbti, naudokite pagrindinį „prenumeravimo“ metodą.

Papildomi parametrai

Visi MVVMCross prenumeratos metodai leidžia sudaryti du papildomus parametrus:

- „MvxReference“: šis parametras nurodo, ar prenumerata turėtų naudoti silpną ar stiprią nuorodą. Silpnos nuorodos (`mvxReference.weak`) leidžia šiukšlių rinkėjui pašalinti prenumeratą, jei abonentas nebebus nurodomas, o stiprios nuorodos (` mvxReference.strong`) užkirs kelią, užtikrinant, kad prenumerata išliks aktyvi, kol aiškiai nepasireiškia.

- Žyma: norint suskirstyti prenumeratas, galima pateikti pasirenkamą eilutės žymą. Tai naudinga tvarkant kelias prenumeratas arba filtravimo tikslais.

Apibendrinant galima pasakyti, kad „MVVMCross“ įvykių prenumeratos mechanizmas suteikia lanksčias gijų valdymo parinktis, leidžiančias kūrėjams pasirinkti, kaip pranešimai pateikiami atsižvelgiant į jų konkrečius programų poreikius. Šis lankstumas yra labai svarbus palaikant reaguojančias UI ir efektyviai tvarkant fono užduotis.

Citatos:
[1] https://www.mvvmcross.com/documentation/plugins/messenger
[2] https://www.mvvmcross.com/mvvmcross-4.4.2/
[3] https://stackoverflow.com/questions/18465927/advice-on-when-wen-hen-to-use-bservableCollection-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-multitithreading-andispatching-in-mvvm-aplications
[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-ss
[10] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle