简单的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”。我只是用包装器类而不是子类来实现它。