简单的BusProvider.getInstance().post()不是例外main thread.如何使用Otto事件总线将事件从Service发送到Activity?
And*_*nie 121
要从任何线程(主要或背景)发布并在主线程上接收,请尝试类似的方法
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);
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意:对于一般方法,可以通过https://github.com/square/otto/issues/38获取Jake Wharton和"pommedeterresaute" .我只是用包装类而不是子类实现它.
ale*_*ett 20
要从任何线程(主要或后台)发布并在主线程上接收,请使用以下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);
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是基于Andy Dennie的回答.
不需要扩展和包装Bus对象,做一个或另一个.在Dennie的答案中,它实际上是一个包装器,Bus基类只是像接口一样被使用,所有功能都被覆盖了.
即使您删除了Bus基类,它也会起作用,除非您碰巧引用MainThreadBus了Bus引用.
| 归档时间: |
|
| 查看次数: |
28380 次 |
| 最近记录: |