今天在google play上收集到一个程序异常的信息
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@406ab4c8 is not valid; is your activity running?
at android.view.ViewRoot.setView(ViewRoot.java:532)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:200)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:114)
at android.view.Window$LocalWindowManager.addView(Window.java:424)
at android.app.Dialog.show(Dialog.java:241)
at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
at com.nttdocomo.communicase.carriermail.activity.MailSettingAccountRecieveActivity$2$1.run(MailSettingAccountRecieveActivity.java:558)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
在线程里弹出dialog的时候
new AlertDialog.Builder( MailSettingAccountRecieveActivity.this) .setTitle( getString(R.string.check_failed_title)) .setMessage(errMessage) .setPositiveButton(getString(R.string.ok), null) .show(); } });
stackflow 上的解释是
The problem is that the dialog need to have the "base" context of your activity, not necessarily the one you're launching it from.
然后我在弹dialog之前加上了这段代码
Activity activity = MailSettingAccountRecieveActivity.this; while (activity.getParent() != null) { activity = activity.getParent(); } new AlertDialog.Builder(activity) .setTitle( getString(R.string.check_failed_title)) .setMessage(errMessage) .setPositiveButton( getString(R.string.ok), null).show(); } });