错误
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@ff741db is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:679)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
at android.widget.Toast$TN.handleShow(Toast.java:459)
at android.widget.Toast$TN$2.handleMessage(Toast.java:342)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6157)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
原因分析
当界面销毁后,执行了弹出 toast 的操作,由于要弹出的 toast 所要依附的 context 已经不存在导致的。
解决方法
当执行弹出 toast 的操作时,先判断界面是否已销毁,如果已销毁,直接返回,代码如下:
if (context instanceof Activity) {
Activity a = (Activity) context;
if (a.isFinishing()) {
return;
}
}