我正在尝试使用似乎需要在我的服务中创建处理程序的SDK。
出现一条错误消息,说如果线程没有调用Looper.prepare()
我就无法创建处理程序,所以我会调用Looper.prepare()
并且此问题消失。
但是,这个服务需要在一段时间后启动一个活动,并且这个Looper.prepare()
似乎搞乱了它,因为第一个UI函数崩溃说不能从非ui线程调用它。
我对为什么会发生这种情况感到有点困惑,我对线程和活套的研究并没有帮助我。我明白为什么如果线程上不存在looper我们就不能创建一个处理程序,但是为什么创建一个looper会阻止我之后使用ui线程。
在我的代码下面简化:
public class MyService extends Service implement SDKCallback{
...
void callSDK(){
Looper.prepare();
SDK.run(); //Does thing I don't know about
}
@Override
SDKCallback(){
startActivity(new Intent(this, MyActivity.class);
}
}
答案 0 :(得分:1)
您不必致电Looper.prepare()
。尝试使用此代码创建Handler
,
new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message message) {
}
};
如果你将Looper.prepare()
放在你的工作线程中,它将解决你的第一个崩溃问题[线程没有调用Looper.prepare()
]。但它不在UI线程中,所以你不能开始下一个Activity
。
上面代码的作用是,它在UI线程中创建Handler
。所以你可以开始下一个Activity
。
编辑:试试这个。
@Override
SDKCallback(){
new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message message) {
startActivity(new Intent(MyService.this, MyActivity.class));
}
};
}