使用com.google.android.gms的DeadObjectException

ono*_*ono 10 android google-api

我在下面的日志中经常崩溃.它没有引用我的应用程序代码,但我猜它可能与GoogleApiClient连接/断开连接有关.有人得到类似的东西吗?我在这里找不到任何东西.

java.lang.IllegalStateException: android.os.DeadObjectException
  at com.google.android.gms.internal.ao.removeAllListeners(Unknown Source)
  at com.google.android.gms.internal.ap.disconnect(Unknown Source)
  at com.google.android.gms.common.api.b.n(Unknown Source)
  at com.google.android.gms.common.api.b.a(Unknown Source)
  at com.google.android.gms.common.api.b$2.onConnectionSuspended(Unknown Source)
  at com.google.android.gms.internal.r.y(Unknown Source)
  at com.google.android.gms.internal.q$a.handleMessage(Unknown Source)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:136)
  at android.app.ActivityThread.main(ActivityThread.java:5102)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:515)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
  at dalvik.system.NativeStart.main(Native Method)
Caused by: android.os.DeadObjectException
  at android.os.BinderProxy.transact(Native Method)
  at com.google.android.gms.internal.an$a$a.a(Unknown Source)
  ... 15 more
Run Code Online (Sandbox Code Playgroud)

可能它正在发生的地方.我添加了一个try/catch来捕获异常

mGApiClientMgr.addTask(mGApiClientMgr.new GoogleApiClientTask() {
            @Override
            public void run() {
                Log.d(LOG_TAG, "Refreshing data set.");
                Location location;
                try {
                    location = LocationServices.FusedLocationApi.getLastLocation(getGoogleApiClient());
                    onLocationChanged(location);
                }
                catch(IllegalStateException ex) {
                    // TODO
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

在哪里addTask:

  private final LinkedBlockingQueue<GoogleApiClientTask> mTaskQueue = new LinkedBlockingQueue
        <GoogleApiClientTask>();

  mTaskQueue.offer(task);
Run Code Online (Sandbox Code Playgroud)

ash*_*oke 6

这似乎与处理程序和消息传递有关...基于堆栈跟踪的下面片段,在尝试处理 looper 时gms会看到一个.即使堆栈跟踪显示相关,它也可能由您的代码触发.DeadObjectExceptionmessagegms

   at com.google.android.gms.internal.q$a.handleMessage(Unknown Source)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:136)
Run Code Online (Sandbox Code Playgroud)

如果message它试图访问属于一个已退出/终止的进程,则会看到此异常.在代码中搜索所有处理程序sendMessage*消息调度调用的代码.即使这可能无法捕获所有实例,因为某些gms调用可能导致handler消息调度.

此外,检查是否有任何后台服务或已分配handler消息的活动正在退出.Android可能会根据生命周期状态onDestroy销毁它们,请尝试覆盖.

在您的所有活动/服务中,您调用gmsapi的任何地方,检查您创建并传递给的对象gms; 如果他们死了,那些对象就不再有效了.