otto eventbus for android在发布版本中表现不同

ste*_*uer 5 events multithreading android event-bus otto

我有一个单件服务类,它按照设定的时间表从服务器中提取数据.一旦客户端收到数据,我就触发bus.post(new NewServerResponseEvent());(http://square.github.io/otto/)

然后在我的片段中我这样做:

@Override
public void onResume() {
    super.onResume();
    eventBus.register(this);
}

@Override
public void onPause() {
    super.onPause();
    eventBus.unregister(this);
}

@Subscribe
public void handleNewServerData(NewServerResponseEvent e) {
    refreshView();
}
Run Code Online (Sandbox Code Playgroud)

只要我在我的测试设备上进行开发时,一切都运行得非常顺利.一旦我构建了一个发布版本并将其放入Play商店,handleNewServerData()就永远不会调用该函数.

我无法理解这一点.将整个事物作为发布版本运行会有什么不同?是否有可能在另一个线程中发生的事情无法发布给我的订阅者?

有人能指出我正确的方向吗?

提前致谢

laa*_*lto 14

有可能您的发布版本是通过ProGuard运行的,并且它推断出由于订阅者方法不是直接调用的,因此可以将它们作为未使用的代码安全地删除.Otto通过反射调用方法,ProGuard无法看到.

将以下内容添加到proguard配置文件中以保留方法注释@Subscribe@Produce:

-keepattributes *Annotation*
-keepclassmembers class ** {
    @com.squareup.otto.Subscribe public *;
    @com.squareup.otto.Produce public *;
}
Run Code Online (Sandbox Code Playgroud)