looper.prepare 个 ui 线程

looper.prepare an ui thread

我正在尝试使用似乎需要在我的服务中创建处理程序的 SDK。

出现一条错误消息,指出如果线程未调用 Looper.prepare(),我将无法创建处理程序,所以我调用了 Looper.prepare(),此问题就消失了。 然而,这个服务需要在一段时间后启动一个 activity,而这个 Looper.prepare() 似乎在搞乱它,因为第一个 UI 函数崩溃说它不能从非-ui线程。

我有点困惑为什么会这样,我对 thread 和 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);

}


}

您不必致电 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));
        }
    };


}