MVVMCross varmistaa tapahtumatilausten jätteiden keräyksen pääasiassa heikkojen viitteiden avulla. Tässä on yksityiskohtainen selitys siitä, miten se toimii:
MVVMCross Messenger -katsaus
MVVMCross Messenger -laajennus on suunniteltu helpottamaan komponenttien välisten tapahtumien yhdistämistä. Sen avulla komponentit voivat kommunikoida julkaisemalla ja tilaamalla viestit. Messenger käyttää heikkoja viitteitä tapahtumatilauksiin, mikä auttaa estämään muistivuotoja antamalla jätteiden keräilijän poistaa esineitä, joihin ei enää viitata.
Heikot viitteet MVVMCrossissa
Kun tilaat viestin MVVMCross Messenger -sovelluksella, voit määrittää, käytetäänkö heikkoa vai vahvaa viitettä. Oletuksena MVVMCross käyttää tilauksia heikkoja viitteitä (mvxreference.weak`). Tämä tarkoittaa, että lähettiläs ei pidä vahvaa viittausta takaisinsoittomenetelmään, jolloin jätteiden keräilijä voi poistaa tilauksen, jos tilaaman objekti menee laajuudesta.
Tilaus ja peruuttaminen
Tilauksia voidaan hallita useilla menetelmillä:
- Tilaa: Viestit välitetään suoraan julkaisukäntää.
- TIEDONONMAINTREAD: Viestit on marssoitu pääasialliseen käyttöliittymään.
- TilaajaThreadPoolThread: Viestit on jonotettu säiettä -poolin käsittelyyn.
Jokainen tilausmenetelmä palauttaa `mvxSubScriptionToken`, jota voidaan käyttää viestistä tilaamiseen. Jos merkkiä ei kuitenkaan säilytetä, tilaus voidaan kuitenkin kerätä välittömästi.
roskakorin keräysmekanismi
MVVMCrossin jätteiden keräysmekanismi riippuu siitä, että "mvxSubscriptionToken" on kerätty roskaa, kun se menee laajuudesta. Jos tilausmerkkiä ei tallenneta, se on kelvollinen jätteiden keräykseen, mikä voi johtaa tapahtuman käsittelijän määrittämiseen. Tämä lähestymistapa varmistaa, että esineitä ei pidetä muistissa tarpeettomasti tapahtumatilausten takia.
Tilauksen tilan tarkkailu
MVVMCross tarjoaa myös menetelmiä nykyisen tilauksen tilan noudattamiseksi, kuten `Hassubscriptionsfor` ja` countSubscriptionsOr`. Lisäksi lähettiläs julkaisee `mvxSubscriberChangEMessage` -viestejä aina, kun tilaukset lisätään, poistetaan tai vanhenee, jolloin komponentit voivat mukauttaa käyttäytymistään nykyisen tilaustilan perusteella.
Muistinhallinnan parhaat käytännöt
Tehokkaan roskien keräämisen varmistamiseksi ja muistivuotojen estämiseksi:
- Käytä heikkoja viitteitä tapahtumatilauksiin aina kun mahdollista.
- Säilytä tilauskohteet, jos joudut hallitsemaan tilauksia nimenomaisesti.
- Tapahtumien tilaaminen, kun niitä ei enää tarvita, varsinkin jos käytät vahvoja viitteitä.
- Vältä vahvojen viittausten pitämistä esineisiin, jotka tulisi kerätä roskia, kuten näkymämalleja tai näkymiä.
Seuraamalla näitä käytäntöjä ja hyödyntämällä MVVMCrossin heikkoa tilausmekanismia, kehittäjät voivat auttaa varmistamaan, että tapahtumatilaukset eivät estä objektien keräämistä, mikä ylläpitää sovelluksensa tehokasta muistinhallintaa.
Viittaukset:[1] https://www.mvvmcross.com/documentation/plugins/messenger
.
[3] https://stackoverflow.com/questions/12494804/helping-the-gc-in-mono-droid-using-mvmcross
[4] https://gregshackles.com/weak-subscription-gotcha-in-mvvmcross/
[5] https://github.com/mvvmcross/mvvmcross/issues/2145
[6] https://livebook.manning.com/book/xamarin-in-action/b-using-mvvm-light-instead-of-mvvmcross/v-15/
.
[8] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup
[9.