2

我通过扩展创建了一个简单的自定义布局ViewGroup。我创建 aButton和 a PopupMenuon init()。如果按钮被按下,PopupMenu则会显示。问题是,当PopupMenu显示时,如果我旋转设备,我会收到以下错误消息。

E/WindowManager: android.view.WindowLeaked: Activity has leaked window android.widget.PopupWindow$PopupDecorView{c44e7da VE..... ......ID 0,0-392,960} 最初添加在这里

我发现了一个类似的问题(PopupMenu PopupWindow$PopupViewContainer 泄漏),解决方案是调用dismiss(). PopupMenu onStop()但是,由于这不是一个活动,而是一个ViewGroup,所以我没有onStop(). 所以,我试图找到一个类似名称的事件,并找到onDetachedFromWindow(). 我打电话dismiss()进来onDetachedFromWindow()

onDetachedFromWindow()确实在屏幕旋转之前被调用,但我仍然收到 WindowLeaked 错误消息。

我怎么解决这个问题?实际上,应用程序似乎工作正常,我得到的只是日志中的错误消息。这个错误可以忽略吗?

4

1 回答 1

2

可能这个答案对你来说为时已晚,但我会分享我发现的内容,以防其他人感兴趣。PopupMenu内部使用PopupWindow。当您调用PopupMenu.dismiss()它时,当指定退出转换时,它不会立即PopupWindow.dismiss()关闭。PopupWindow尽管您dismiss()在适当的时间调用,窗口实际上并没有足够快地从层次结构中删除。需要在您的活动被破坏之前将其删除,以免出现此泄漏错误。我没有看到PopupMenu立即解雇的方法。一种可能的解决方法是PopupWindow直接使用 a 而不是 a PopupMenu,并setExitTransition(null)在解雇之前调用。

于 2016-10-20T08:43:53.953 回答