MVVMCross는 큐잉 메커니즘을 구현하여 'SubscribeOnthreadpoolthread`를 사용할 때 메시지가 손실되지 않도록합니다. `subscribeonthreadpoolthread`를 사용하여 메시지를 구독하면 스레드 풀 스레드에서 비동기 처리를 위해 들어오는 메시지가 대기됩니다. 이 접근법은 메시지 게시자와 가입자가 다른 스레드에 있더라도 메시지가 수신 순서대로 처리되도록 보장합니다.
다음은 이것이 어떻게 작동하는지에 대한 자세한 설명입니다.
1. 메시지 대기열 : 메시지가 게시되고`extribeonthreadpoolthread`를 사용하는 가입자가 있으면 메시지가 큐에 추가됩니다. 이렇게하면 가입자가 즉시 처리 할 수없는 경우에도 메시지가 손실되지 않도록합니다.
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-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-get-get-linked-tothe-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