Usando Otto, o método só assina se eu chamá-lo diretamente em outro lugar
Pergunta
Eu tenho um problema onde um dos meus subscrito métodos não são chamados em uma postagem do tipo de evento correto, a menos que subscrito método é usado (chamado) em outro lugar.
Aqui estão algumas informações relevantes sobre o código:
- Um método de uma das minhas classes é anotado com @Subscribe.
- Ao percorrer o código com o depurador, descubro que, em minhas circunstâncias específicas, a classe não possui métodos anotados com @Subscribe.
- A menos que eu chame o método diretamente em algum momento (não importa quando, ou mesmo se ele for chamado em tempo de execução) em outro lugar, meu publicar não funciona.
- O IDE (Android Studio) me notifica que o "método nunca é usado"
Certamente posso chamar o método em um bloco de código que tenho certeza de que nunca será acionado, mas essa é obviamente uma prática terrível e vai contra o propósito desse paradigma de postagem/assinatura.
Ou posso tornar o método estático, mas prefiro não, porque uso variáveis de membro dentro dele.
Quaisquer soluções para o motivo pelo qual isso está ocorrendo, embora o exemplo de Otto use um padrão semelhante
Solução
Acontece que era um problema do ProGuard.Corrigido adicionando as seguintes linhas:
-keepclassmembers class ** {
@com.squareup.otto.Subscribe public *;
@com.squareup.otto.Produce public *;
}