我通过扩展ViewGroup
创建了一个简单的自定义布局。我在Button
上创建了PopupMenu
和init()
。如果按下按钮,则会显示PopupMenu
。问题是,当显示PopupMenu
时,如果我旋转设备,则会收到以下错误消息。
E / WindowManager:android.view.WindowLeaked:Activity 已经泄露了窗户 android.widget.PopupWindow $ PopupDecorView {c44e7da V.E ...... ...... ID 最初添加的0,0-392,960}
我找到了类似的问题(PopupMenu PopupWindow$PopupViewContainer leak),解决方案是调用dismiss()
PopupMenu
的{{1}}。但是,由于这不是一项活动而是onStop()
,因此我没有ViewGroup
。所以,我试图找到一个类似命名的事件,并找到了onStop()
。我在onDetachedFromWindow()
中致电dismiss()
。
onDetachedFromWindow()
,但我仍然收到WindowLeaked错误消息。
我该如何解决这个问题?实际上,似乎应用程序工作正常,我得到的只是日志中的错误消息。这个错误是否可以忽略?
答案 0 :(得分:0)
这个答案可能对你来说太迟了,但我会分享我发现的,以防其他人感兴趣。 PopupMenu
在内部使用PopupWindow
。当您致电PopupMenu.dismiss()
时,它会调用PopupWindow.dismiss()
,但在指定退出转换时,不会立即解除PopupWindow
。尽管您在适当的时间调用dismiss()
,但实际上并没有足够快地从层次结构中删除窗口。在活动被销毁之前需要将其删除,以免出现此泄漏错误。我没有看到立即解雇PopupMenu
的方法。可能的解决方法可能是直接使用PopupWindow
而不是PopupMenu
,并在解雇前致电setExitTransition(null)
。