我经常在下面的日志中崩溃。它没有引用我的应用程序代码,但我猜它可能与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
可能发生的地方。我添加了一个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
}
}
});
addTask
所做的事情:
private final LinkedBlockingQueue<GoogleApiClientTask> mTaskQueue = new LinkedBlockingQueue
<GoogleApiClientTask>();
mTaskQueue.offer(task);
答案 0 :(得分:5)
这似乎与处理程序和消息传递有关...根据堆栈跟踪中的以下代码段,gms
在尝试使用looper上的DeadObjectException
时看到process a message
。即使堆栈跟踪显示gms
相关,也可能由您的代码触发。
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)
如果其尝试访问的message
属于已退出/已终止的进程,则会看到此异常。通过代码完成所有handler sendMessage*
message dispatch calls的代码搜索。即使这可能无法捕获所有实例,因为某些gms
调用可能会导致handler
消息调度。
此外,检查是否有任何后台服务或分配了handler
消息的活动正在退出。 Android可能正在摧毁他们depending on life cycle states, try overriding onDestroy
。
在您的所有活动/服务中,您拨打gms
api的任何地方,检查您创建的对象并传递给gms
;如果他们死了,那些物品就不再有效了。