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

Foi útil?

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 *;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top