Java Otto EventBus:事件已激发多次
我在android应用程序中使用Otto事件总线,但存在相同事件被多次触发的问题(Java Otto EventBus:事件已激发多次,java,android,otto,Java,Android,Otto,我在android应用程序中使用Otto事件总线,但存在相同事件被多次触发的问题(event.hashCode()返回相同的整数)。我用于触发事件的代码如下所示(简化): 然后我有一个类来处理这样的事件,它是在我的main活动中创建的。onCreate: public class StuffManager { @Inject Bus bus; public StuffManager(Activity ctx) { App.getComponent(ctx).in
event.hashCode()
返回相同的整数)。我用于触发事件的代码如下所示(简化):
然后我有一个类来处理这样的事件,它是在我的main活动中创建的。onCreate
:
public class StuffManager {
@Inject Bus bus;
public StuffManager(Activity ctx) {
App.getComponent(ctx).inject(this);
bus.register(this);
}
@Subscribe
public void manageStuff(Event event) {
Log.d("SYNC", "Some event needs to be managed");
Log.d("SYNC", "HASH: " + event.hashCode());
}
}
日志消息仅显示一次,事件仅在该特定位置创建。事件总线提供的.post
方法中似乎发生了意外情况
这是怎么发生的?我能做些什么来防止它?问题不在于事件实际上被触发了多次,而在于处理程序被多次调用。如上面代码所示,每当我创建对象时,
bus.register
方法被调用;由于活动生命周期的原因,这会发生多次,导致处理程序被多次调用
感谢您引导我走上正确的道路。问题不在于事件实际上被触发了多次,而在于处理程序被多次调用。如上面代码所示,每当我创建对象时,
bus.register
方法被调用;由于活动生命周期的原因,这会发生多次,导致处理程序被多次调用
感谢你引导我走上了正确的道路。这也发生在我身上。我有一些片段使用相同的片段类StuffFragment,我创建了StuffFragment的两个实例。因为我在StuffFragment类中订阅了Otto总线。post方法发生一次,实际事件触发一次。但是因为有两个实例,所以它在接收事件时会做相同的事情,看起来我们收到了两个事件。我也遇到了这种情况。我有一些片段使用相同的片段类StuffFragment,我创建了StuffFragment的两个实例。因为我在StuffFragment类中订阅了Otto总线。post方法发生一次,实际事件触发一次。但是因为有两个实例,所以它在接收事件时会做相同的事情,看起来我们收到了两个事件。你为什么认为事件被多次触发?我编辑了主要帖子来回答你的问题。你确定你不只是有多个
StuffManager
实例吗?奥托也会根据带注释方法的param类型匹配侦听器,因此对于事件类名称,您应该比Event
更具描述性,否则您可能会到处都有侦听器。。。除非出于示例的目的对其进行了简化。是什么让你相信事件被多次触发?我编辑了主要帖子来回答你的问题。你确定你没有简单地拥有多个StuffManager
?此外,otto将根据带注释方法的参数类型匹配侦听器,因此,对于事件类名称,您应该比Event
更具描述性,否则您可能会到处都有侦听器。。。除非为了举例的目的也简化了。我怀疑可能是这样的:P高兴我能帮忙。我怀疑可能是这样的:P高兴我能帮忙。答案是提出解决方案,请使用注释详细说明问题。答案是提出解决方案,请使用注释详细说明问题。
public class StuffManager {
@Inject Bus bus;
public StuffManager(Activity ctx) {
App.getComponent(ctx).inject(this);
bus.register(this);
}
@Subscribe
public void manageStuff(Event event) {
Log.d("SYNC", "Some event needs to be managed");
Log.d("SYNC", "HASH: " + event.hashCode());
}
}