首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Otto事件总线将事件从服务发送到活动?

如何使用Otto事件总线将事件从服务发送到活动?
EN

Stack Overflow用户
提问于 2013-03-15 19:53:31
回答 7查看 29K关注 0票数 58

简单BusProvider.getInstance().post()会带来异常,而不是main thread。如何使用Otto事件总线将事件从服务发送到活动?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-03-15 21:09:30

要从任何线程(主线程或后台线程)发布并在主线程上接收,请尝试如下所示

public class MainThreadBus extends Bus {
  private final Handler mHandler = new Handler(Looper.getMainLooper());

  @Override
  public void post(final Object event) {
    if (Looper.myLooper() == Looper.getMainLooper()) {
      super.post(event);
    } else {
      mHandler.post(new Runnable() {
        @Override
        public void run() {
          MainThreadBus.super.post(event);
        }
      });
    }
  }
}

注:一般方法归功于杰克·沃顿和https://github.com/square/otto/issues/38的"pommedeterresaute“。我只是用包装器类而不是子类来实现它。

票数 122
EN

Stack Overflow用户

发布于 2014-02-27 17:13:51

要从任何线程(主线程或后台线程)发布并在主线程上接收,请使用以下MainThreadBus而不是普通的Bus

public class MainThreadBus extends Bus {
     private final Handler handler = new Handler(Looper.getMainLooper());

     @Override public void post(final Object event) {
        if (Looper.myLooper() == Looper.getMainLooper()) {
            super.post(event);
        } else {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    MainThreadBus.super.post(event);
                }
            });
        }
    }
}

这是基于Andy Dennie的回答。

不需要同时扩展和包装Bus对象,只需其中之一。在丹尼的回答中,它实际上是一个包装器,Bus基类只是像一个接口一样使用,所有的功能都被覆盖了。

即使您删除了Bus基类,它也可以工作,除非您碰巧通过Bus引用引用了MainThreadBus

票数 20
EN

Stack Overflow用户

发布于 2016-11-25 12:06:19

或者,如果你确定你是从一个非主线程发帖的,那么简单地这样做:

new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        mBus.post(new myEvent());
                    }
                });

正如俗语所说,“保持简单和愚蠢”:)

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

https://stackoverflow.com/questions/15431768

复制
相关文章

相似问题

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