无法在主线程

时间:2017-02-10 15:51:07

标签: java android multithreading android-studio unity3d

我正在使用.jar api从Unity3D读取Google Fit数据。我现在面临的问题是,当我想执行这段代码时:

private void buildFitnessClient() {
    mClient = new GoogleApiClient.Builder(myContext).addApi(Fitness.HISTORY_API)
                .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
                .addConnectionCallbacks(new ConnectionCallbacksListener())
                .enableAutoManage(this, 0, new ConnectionFailedListener()).build();
}

我收到错误: java.lang.IllegalStateException:必须从进程的主线程

中调用

此错误是由代码行的最后一句中的 this 引用引起的。

现在在线我发现我可以通过在Main Looper上启动Handler来解决这个问题,我尝试使用此代码:

new Handler(Looper.getMainLooper()).post(
            new Runnable() {
                @Override
                public void run() {
                    try {
                        buildFitnessClient();
                    } catch (Exception ex) {
                        Log.i(TAG, ex.getMessage() + "\n");
                    }
                }
            });

出于某种原因,我的Unity应用程序立即崩溃,通常我可以得到错误,因为我使用try catch语句。有了这个问题,它立即崩溃,没有我可以检查的日志。

当我在没有mainlooper的情况下创建Handler时,例如:

new Handler()

new Handler(Looper.myLooper())

代码运行,但java.lang.IllegalStateException错误仍然存​​在,而Thread.currentThread()显然保持不变。

程序运行的线程是Unity创建的线程。

提前致谢!

0 个答案:

没有答案