无法在主线程上启动Handler
我正在使用.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:必须从进程的主线程调用
此错误是由于代码行的最后一句中的此引用所致。
现在在线我发现我可以通过在主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创建的线程。
提前致谢!