MVVMCross гарантує, що повідомлення не втрачаються при використанні `Підписки, що підписується, шляхом реалізації механізму черги. Коли ви підписуєтесь на повідомлення за допомогою `Підписки, що підписуються, будь -які вхідні повідомлення в черзі для асинхронної обробки на потоці пулу. Такий підхід гарантує, що повідомлення обробляються в тому порядку, який вони отримали, навіть якщо видавець повідомлень та абонент перебувають на різних потоках.
Ось детальне пояснення того, як це працює:
1. Черга повідомлень: Коли публікується повідомлення, і є абоненти, які використовують `Підписку, що підписується, повідомлення додається до черги. Це гарантує, що повідомлення не втрачаються, навіть якщо абонент не одразу доступний для їх обробки.
2. Обробка пулу нитки: Потім повідомлення про чергу обробляються асинхронно ниткою пулу. Це означає, що повідомлення обробляються без блокуючих способів, заважаючи затримати інтерфейс користувача або видавця.
3. Порядок обробки: Повідомлення обробляються в тому порядку, який вони отримали. Це гарантує збереження порядку подій, що має вирішальне значення для збереження цілісності стану програми.
4. Слабкі посилання: За замовчуванням MVVMCross використовує слабкі посилання на підписки, що допомагає запобігти витоку пам'яті. Однак, використовуючи `підписку -ereadpoolthread`, важливо гарантувати, що маркер підписки належним чином зберігається, щоб запобігти передчасно передплати.
5. Підписи жетонів: При підписці повертається маркер, який повинен зберігатися абонент. Цей маркер може бути використаний для скасування підписки з типу повідомлення пізніше. Зберігання маркера гарантує, що підписка залишається активною до того, як явно не скасовано.
Підводячи підсумок, MVVMCross гарантує, що повідомлення не втрачаються при використанні `Підписки, що підписується, шляхом черги повідомлень для асинхронної обробки на потоці пулу потоку, підтримуючи порядок обробки та використання жетонів підписки для ефективного управління підписками. Такий підхід дозволяє ефективно та надійне обробку повідомлень у різних потоках у програмі.
Цитати:[1] https://www.mvvmcross.com/documentation/plugins/messenger
[2] https://stackoverflow.com/questions/17324650/mvvmcross-multithreading-ins
[3] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[4] https://www.youtube.com/watch?v=hqdvrwwzkik
[5] https://www.mvvmcross.com/documentation/advanced/customizing-using-app-and-setup
[6] https://stackoverflow.com/questions/17602137/mvvmcross-how-does-this-view-get-linked-the-viewmodel/17602246
[7] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[8] https://diglib.tugraz.at/download.php?id=576a78335451d&location=browse
[9] https://stackoverflow.com/questions/37168519/alert-dialog-in-viewmodel-mvvmcross