问题现象
关键崩溃的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);
}
本文介绍了一个常见的PopupWindow崩溃问题——“BadTokenException”,并详细解释了其发生的原因及解决方案。当PopupWindow关联的Activity被销毁后,如果继续调用showAtLocation方法,则会引发此错误。文章提供了一段示例代码来避免此类问题的发生。
1万+

被折叠的 条评论
为什么被折叠?



