Android开发踩坑之PopupWindow "Unable to add window -- token null is not valid; is your activity running"

问题现象

关键崩溃的BS如下:

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:579)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:310)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    at android.widget.PopupWindow.invokePopup(PopupWindow.java:1315)
    at android.widget.PopupWindow.showAtLocation(PopupWindow.java:1075)
    at android.widget.PopupWindow.showAtLocation(PopupWindow.java:1038)

根本原因

PopupWindow关联的Activity被销毁后,还调用showAtLocation方法

解决方案

调用showAtLocation方法时,除了调用View的post(Runnable action)(在Runable显示PopupWindow),在调用showAtLocation前需要判断一下关联的Activity是否已经被销毁

//示例代码如下
if (!Activity实例.isFinishing()) {
    PopupWindow实例.showAtLocation(view实现, Gravity.NO_GRAVITY, 0, 0);
}

参考资料

猜你喜欢

转载自blog.csdn.net/SCHOLAR_II/article/details/80774847