looper.prepare是一个ui线程

时间:2016-05-10 13:42:04

标签: android user-interface looper

我正在尝试使用似乎需要在我的服务中创建处理程序的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);

}


}

1 个答案:

答案 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));
        }
    };


}