首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Otto EventBus:事件多次触发

Otto EventBus:事件多次触发
EN

Stack Overflow用户
提问于 2015-11-26 16:16:54
回答 2查看 2.3K关注 0票数 0

我在我的android应用程序中使用Otto事件总线,遇到相同事件多次被触发的问题(event.hashCode()返回相同的整数)。我用来触发事件的代码看起来如下(简化):

代码语言:javascript
复制
public class MyFragment extends MyCustomFragment {
    @Inject Bus eventBus;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        App.getComponent(getActivity()).inject(this); // use dagger to inject the event bus
    }


    // called from within `onOptionsItemSelected`
    public void handleOptionsItemXy() {
        AlertDialog.Builder a = new AlertDialog.Builder(getActivity())
            // ...
            .setPositiveButton(R.string.button_label_ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // EVENT IS FIRED HERE
                    Log.d("INFO", "This log message is only displayed once!");
                    eventBus.post(new Event(EVENT_DATA));
                }
            });
    }
}

然后,我有一个类来处理这样的事件,它是在我的MainActivity.onCreate中创建的

代码语言:javascript
复制
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方法内部似乎发生了一些意外的事情。

这是怎么发生的?我能做些什么来阻止它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-26 16:37:30

问题不在于事件实际上是多次触发,而是处理程序被多次调用。如上面的代码所示,每次创建对象时都调用bus.register方法;由于活动生命周期的关系,这种情况发生了多次,导致多次调用处理程序。

感谢jonk带领我走上正确的道路。

票数 4
EN

Stack Overflow用户

发布于 2017-04-12 20:51:32

我也在发生这种事。我有一些片段使用相同的片段类,称为StuffFragment,我创建了两个StuffFragment实例。因此,因为我在StuffFragment类中订阅了Otto总线。post方法只发生一次,实际事件只触发一次。但是,由于有两个实例,所以在接收事件时,它将执行相同的操作,这看起来就像我们收到了两个事件。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33943071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档