我想使用以下方法从FromTowerThread发送广播:
void postToService(final String string){
Handler handler = new Handler();
handler.post(new Runnable(){
@Override
public void run() {
context.sendBroadcast(new Intent(string));
}
});
}
我的上下文是'this'(我的服务):
FromTowerThread ftt = new FromTowerThread(this);
(只是为了完整性我在FromTowerThread中的构造函数):
public FromTowerThread(Context context){
this.context=context;
}
我得到的错误是“无法在未调用Looper.prepare()的线程内创建处理程序”。
我不知道如何修复此错误,我发现有关此主题的所有主题都无法帮助我理解这一点。
提前致谢!
克里斯
答案 0 :(得分:0)
我得到的错误是“无法在未调用Looper.prepare()的线程内创建处理程序”。
如果要扩展Thread,请尝试扩展HandlerThread。 HandlerThread已经有一个Looper。 (或者您可以在常规线程中自己调用Looper.prepare()
和Looper.loop()
。)
否则你可以做一些事情来使用主线程的Looper。例如,在主线程中创建Handler并将其传递给您的工作线程,或者甚至从UI线程传递一个View并调用view.post(Runnable)
以在UI线程上执行该Runnable。
答案 1 :(得分:0)
Post只能在一个名为Looper.prepare()的线程中的Handler中完成。
我在这里假设调用void postToService(final String string)
的线程是某种类型的后台线程。通常UI线程会调用Looper.prepare()
,这意味着您必须在UI线程内创建Handler。
但是作为一般性建议,我很确定你可以消除所有这些并立即拨打广播:
void postToService(final String string){
context.sendBroadcast(new Intent(string));
}
答案 2 :(得分:0)
更改声明
Handler handler = new Handler();
到
Handler handler = new Handler(Looper.getMainLooper());