如何找出导致BadTokenExceptions的原因

时间:2014-12-06 17:26:55

标签: android

我正在开发一个拥有多项活动和服务的Android应用程序。我正在导入到我的项目中的第三方库中定义了一些活动,问题是在某些设备上(特别是在三星Galaxy Tabs中)我的应用程序在从一个活动切换到之前的活动时通过点击返回时保持崩溃按钮。

我做了一个LogCat,发现这是崩溃的原因:

android.view.WindowManager$BadTokenException: Unable to add window -- token
  android.os.BinderProxy@351c808e is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:562)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:272)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3017)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2365)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

但有趣的是,我的应用程序的类没有出现在堆栈跟踪上。我在StackOverflow上搜索了类似的问题,但是我发现其他每个报告都有一个BadTokenException的堆栈跟踪,相应的应用程序代码总是出现在堆栈跟踪中。

有谁知道这个问题的常见原因和/或排除故障的最佳方法是什么?我注意到这个问题在三星设备上发生的更多,所以可能是这些设备上的实际错误。

1 个答案:

答案 0 :(得分:0)

如果您的活动在调用BadTokenExceptions方法之前(或调用其Window方法之后)尝试创建新onAttachToWindow(),则通常会出现onDetachFromWindow()。您使用的第三方库很可能是错误的,并且无法确保满足此要求。