O mecanismo de assinatura do evento no MVVMcross, principalmente através da interface `imvxMessenger`, lida com o gerenciamento do encadeamento, fornecendo várias opções para como as mensagens são entregues aos assinantes. Isso permite que os desenvolvedores gerenciem rosqueamento com base nos requisitos específicos de seu aplicativo.
Métodos de assinatura ###
O MVVMCROSS oferece três métodos principais para assinar mensagens, cada uma com diferentes implicações de encadeamento:
1. Inscreva -se: Este método fornece mensagens diretamente no tópico onde são publicadas. Possui a menor sobrecarga de processamento, pois as mensagens são recebidas de maneira síncrona. No entanto, requer uma consideração cuidadosa do encadeamento no qual o manipulador de mensagens será executado. Se o manipulador precisar interagir com a interface do usuário, verifique se está funcionando no thread da interface do usuário; Caso contrário, pode não ser capaz de atualizar os elementos da interface do usuário diretamente.
2. SubscribeonMainthread: Este método garante que as mensagens sejam organizadas no thread principal da interface do usuário. É ideal para manipuladores de mensagens que precisam executar tarefas relacionadas à UI, pois garante que o manipulador seja executado no thread da interface do usuário. Isso é crucial para atualizar elementos da interface do usuário, pois a maioria das estruturas da interface do usuário exige que as atualizações da interface do usuário ocorram no thread principal.
3. SubscribeOnthreadPoolThread: As mensagens são filmadas para processamento em um thread de threads. Essa abordagem é adequada para tarefas com uso intensivo de recursos que não devem bloquear a interface do usuário ou o editor de mensagens. Ele garante o processamento assíncrono, mesmo que a mensagem seja publicada em um thread de threads existente.
Considerações de gerenciamento de threads
Ao escolher um método de assinatura, considere o seguinte:
- Atualizações da interface do usuário: Se o manipulador de mensagens precisar atualizar os elementos da interface do usuário, use `subscribeonMainthread`. Isso garante que as atualizações da interface do usuário ocorram no thread correto.
-Tarefas com uso intensivo de recursos: Para tarefas que tenham recursos intensivos em recursos ou não devem bloquear a interface do usuário, use `subscribeOnthreadPoolThread`. Isso mantém a interface do usuário responsiva ao lidar com a tarefa de forma assíncrona.
- Processamento síncrono: se você precisar de mensagens para serem processadas de maneira síncrona e estiver ciente do thread no qual elas serão publicadas, use o método básico de `subscrição '.
Parâmetros adicionais
Todos os métodos de assinatura no MVVMcross permitem dois parâmetros adicionais:
- MVXReference: Este parâmetro especifica se a assinatura deve usar uma referência fraca ou forte. As referências fracas (`mvxReference.weak`) permitem que o coletor de lixo remova a assinatura se o assinante não for mais referenciado, enquanto referências fortes (` mvxReference.strong`) impedem isso, garantindo que a assinatura permaneça ativa até que seja explicitamente cancelada.
- Tag: uma tag de sequência opcional pode ser fornecida para categorizar assinaturas. Isso é útil para gerenciar várias assinaturas ou para fins de filtragem.
Em resumo, o mecanismo de assinatura de eventos da MVVMCROSS fornece opções flexíveis de gerenciamento de encadeamentos, permitindo que os desenvolvedores escolham como as mensagens são entregues com base em suas necessidades específicas de aplicativos. Essa flexibilidade é crucial para manter as UIs responsivas e o manuseio de tarefas de fundo com eficiência.
Citações:[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-dispatching-in-mvvm-pplications
[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