MVVMCrossは、キューイングメカニズムを実装して「subscribeonthreadPoolThread」を使用するときにメッセージが失われないようにします。 「subscribeonthreadpoolthread」を使用してメッセージを購読すると、着信メッセージはスレッドプールスレッドでの非同期処理のためにキューに登録されます。このアプローチは、メッセージ出版社とサブスクライバーが異なるスレッド上にある場合でも、メッセージが受信される順序で処理されることを保証します。
これがどのように機能するかの詳細な説明を示します。
1。メッセージキューイング:メッセージが公開され、「subscribeonthreadpoolthread」を使用してサブスクライバーがある場合、メッセージはキューに追加されます。これにより、サブスクライバーがすぐに処理できる場合でも、メッセージが失われないようにします。
2。スレッドプール処理:キューに掲載されたメッセージは、スレッドプールスレッドによって非同期に処理されます。これは、メッセージが非ブロッキング方法で処理され、UIまたはパブリッシャーが遅れないようにすることを意味します。
3。処理の順序:メッセージが受信された順序で処理されます。これにより、イベントの順序が保持されます。これは、アプリケーションの状態の完全性を維持するために重要です。
4.弱い参照:デフォルトでは、MVVMCrossはサブスクリプションに弱い参照を使用します。これは、メモリリークを防ぐのに役立ちます。ただし、「subscribeonthreadpoolthread」を使用する場合、サブスクリプショントークンが適切に保存されて、サブスクリプションがガベージが早期に収集されないようにすることが不可欠です。
5。サブスクリプショントークン:サブスクライブの場合、トークンが返されます。これはサブスクライバーが保存する必要があります。このトークンは、後でメッセージタイプから登録解除するために使用できます。トークンを保存すると、サブスクリプションが明示的に登録されていないまでアクティブのままであることが保証されます。
要約すると、MVVMCrossは、スレッドプールスレッドでの非同期処理のためのメッセージをキューイングし、処理の順序を維持し、サブスクリプショントークンを使用してサブスクリプションを効果的に管理することにより、「subscribeonthreadpoolthread」を使用するときにメッセージが失われないようにします。このアプローチにより、アプリケーション内の異なるスレッド間で効率的で信頼できるメッセージ処理が可能になります。
引用:[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バインディング
[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-linked to-the-viewmodel/17602246
[7] https://www.mvvmcross.com/documentation/fundmentals/viewmodel-lifecycle
[8] https://diglib.tugraz.at/download.php?id=576a7835451d&location=browse
[9] https://stackoverflow.com/questions/37168519/alert-dialog-in-viewmodel-mvvmcross