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

最佳答案

要从任何线程(主线程或后台线程)发布并在主线程上接收,请尝试类似

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的Jake Wharton和“pommedeterresaute”。我只是用包装器类而不是子类来实现它。

10-07 19:47
查看更多