Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon MVVMCross의 이벤트 구독 메커니즘은 스레드 관리를 처리하는 방법


MVVMCross의 이벤트 구독 메커니즘은 스레드 관리를 처리하는 방법


MVVMCross의 이벤트 구독 메커니즘은 주로 'IMVXMESSENGER'인터페이스를 통해 메시지를 가입자에게 전달하는 방법에 대한 몇 가지 옵션을 제공하여 스레드 관리를 처리합니다. 이를 통해 개발자는 응용 프로그램의 특정 요구 사항에 따라 스레딩을 관리 할 수 ​​있습니다.

구독 방법

MVVMCross는 메시지를 구독하기위한 세 가지 주요 방법을 제공하며, 각각은 다른 스레딩 의미를 갖는다.

1. 구독 :이 방법은 게시 된 스레드에서 직접 메시지를 전달합니다. 메시지가 동기식으로 수신되므로 처리 오버 헤드가 가장 낮습니다. 그러나 메시지 핸들러가 실행되는 스레드를 신중하게 고려해야합니다. 핸들러가 UI와 상호 작용 해야하는 경우 UI 스레드에서 실행 중인지 확인하십시오. 그렇지 않으면 UI 요소를 직접 업데이트하지 못할 수 있습니다.

2. SubscribeOnMainThread :이 메소드는 메시지가 기본 UI 스레드에 마샬링되도록합니다. 핸들러가 UI 스레드에서 실행되도록 UI 관련 작업을 수행 해야하는 메시지 처리기에 이상적입니다. 대부분의 UI 프레임 워크는 기본 스레드에서 UI 업데이트가 발생하기 때문에 UI 요소를 업데이트하는 데 중요합니다.

3. SubscribeonThreadpoolthread : 스레드 풀 스레드에서 처리하기 위해 메시지가 대기됩니다. 이 접근법은 UI 또는 메시지 게시자를 차단해서는 안되는 리소스 집약적 작업에 적합합니다. 기존 스레드 풀 스레드에서 메시지가 게시 되더라도 비동기 처리를 보장합니다.

스레드 관리 고려 사항

구독 방법을 선택할 때 다음을 고려하십시오.

- UI 업데이트 : 메시지 핸들러가 UI 요소를 업데이트 해야하는 경우`extribeonMainThread`를 사용하십시오. 이렇게하면 올바른 스레드에서 UI 업데이트가 발생하도록합니다.

-리소스 집약적 인 작업 : 리소스 집약적이거나 UI를 차단해서는 안되는 작업의 경우`extribeonthreadpoolthread`를 사용하십시오. 이렇게하면 작업을 비동기 적으로 처리하면서 UI 응답을 유지합니다.

- 동기 처리 : 동기식으로 처리 해야하는 메시지가 필요하고 게시 될 스레드를 알고있는 경우 기본 '구독'메소드를 사용하십시오.

추가 매개 변수

MVVMCross의 모든 구독 방법은 두 가지 추가 매개 변수를 허용합니다.

-MVXReference :이 매개 변수는 가입이 약하거나 강한 참조를 사용해야하는지 여부를 지정합니다. 약한 참조 (`mvxReference.weak`) 가입자가 더 이상 참조되지 않으면 쓰레기 수집기가 구독을 제거 할 수있게하는 반면, 강력한 참조 (`mvxReference.Strong`)는이를 방해하여 구독이 명시 적으로 구독되지 않을 때까지 활성 상태를 유지하도록합니다.

- 태그 : 구독을 분류하기 위해 선택적 문자열 태그를 제공 할 수 있습니다. 이는 여러 구독 관리 또는 필터링 목적에 유용합니다.

요약하면 MVVMCross의 이벤트 구독 메커니즘은 유연한 스레드 관리 옵션을 제공하여 개발자가 특정 응용 프로그램 요구에 따라 메시지를 전달하는 방법을 선택할 수 있습니다. 이 유연성은 반응 형 UI를 유지하고 배경 작업을 효율적으로 처리하는 데 중요합니다.

인용 :
[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 및 when-to-to-uservablecollection-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