Механізм підписки на подію в MVVMcross, насамперед через інтерфейс `imvxMessenger`, обробляє управління нитками, надаючи кілька варіантів того, як повідомлень доставляються перед підписникам. Це дозволяє розробникам керувати різьбою на основі конкретних вимог їх застосування.
Методи підписки
MVVMCross пропонує три основні методи для підписки на повідомлення, кожен з яких має різні наслідки різьби:
1. Підпишіться: Цей метод доставляє повідомлення безпосередньо на темі, де вони опубліковані. Він має найнижчу обробку накладних витрат, оскільки повідомлення приймаються синхронно. Однак це вимагає ретельного розгляду потоку, на якій виконуватиметься обробник повідомлень. Якщо обробник повинен взаємодіяти з інтерфейсом інтерфейсу, переконайтеся, що він працює на потоці інтерфейсу; В іншому випадку він може не змогти оновлювати елементи інтерфейсу безпосередньо.
2. Підписка, що підписується: Цей метод гарантує, що повідомлення переміщуються до основної потоки інтерфейсу. Це ідеально підходить для обробників повідомлень, яким потрібно виконувати завдання, пов'язані з інтерфейсом, оскільки це гарантує, що обробник буде виконуватись на потоці інтерфейсу. Це має вирішальне значення для оновлення елементів інтерфейсу інтерфейсу, оскільки більшість рамок інтерфейсу потребують оновлення інтерфейсу користувача на основній темі.
3. Підписується, що підписується: Повідомлення стоять у черзі для обробки на потоці пулу потоку. Цей підхід підходить для інтенсивних ресурсів завдань, які не повинні блокувати користувальницький інтерфейс або видавець повідомлень. Це забезпечує асинхронну обробку, навіть якщо повідомлення опубліковано з існуючої потоки пулу.
міркувань управління нитками
Вибираючи метод підписки, розгляньте наступне:
- Оновлення інтерфейсу: Якщо вашому обробнику повідомлень потрібно оновити елементи користувача, використовуйте `bulneonmainthread`. Це гарантує, що оновлення інтерфейсу відбулися у правильній темі.
-Завдання інтенсивності ресурсів: Для завдань, які є інтенсивними ресурсами або не повинні блокувати інтерфейс користувача, використовуйте `butptoneonthreadpoolthread`. Це підтримує чуйну кількість інтерфейсу під час вирішення завдання асинхронно.
- Синхронна обробка: Якщо вам потрібні повідомлення, які потрібно обробляти синхронно і усвідомлюйте тему, на якій вони будуть опубліковані, використовуйте основний метод `підписки.
Додаткові параметри
Усі методи підписки в MVVMCross дозволяють отримати два додаткові параметри:
- MvxReference: Цей параметр визначає, чи слід підписати на слабку або сильну посилання. Слабкі посилання (`mvxreference.weak`) дозволяють колектору сміття видаляти підписку, якщо абонент більше не посилається, тоді як сильні посилання (` mvxreference.strong`) запобігають цьому, гарантуючи, що підписка залишається активною до тих пір, поки явно не скасовано.
- Тег: Для категоризації підписки може бути надано додатковий рядок. Це корисно для управління декількома підписками або для фільтрації.
Підводячи підсумок, механізм підписки MVVMCross надає гнучкі параметри управління нитками, що дозволяє розробникам вибирати, як надаються повідомлення на основі їх конкретних потреб додатків. Ця гнучкість має вирішальне значення для підтримки чуйного інтерфейсу та ефективного виконання фонових завдань.
Цитати:[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.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