使用Otto,方法只有在我直接在其他地方调用它时才会订阅

时间:2014-07-28 21:49:19

标签: java android proguard otto

我遇到一个问题,我的订阅的方法之一不会在正确的事件类型的帖子上被调用,除非在别处使用(调用)订阅的方法。

以下是有关代码的一些相关信息:

  • 我的一个类的方法用@Subscribe注释。
  • 通过使用调试器逐步执行代码,我发现在我的特定情况下,该类没有使用@Subscribe注释的方法。
  • 除非我在某个时间点直接调用该方法(无论何时,或者即使它实际上在运行时被调用),否则我的帖子不起作用。
  • IDE(Android Studio)通知我"方法从未使用"

我当然可以在代码块中调用该方法,我相信它永远不会触发,但这显然是非常糟糕的做法,并且违背了这个帖子/订阅范例的目的。

或者我可以将方法设为静态,但我不愿意,因为我在其中使用成员变量。

即使奥托的例子使用类似的模式

,任何解决方案都会出现这种情况

1 个答案:

答案 0 :(得分:7)

原来这是一个ProGuard问题。通过添加以下行来修复它:

-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}