我通过扩展ViewGroup
创建了一个简单的自定义布局。我在Button
上创建一个PopupMenu
和一个init()
。如果按下按钮,则会显示PopupMenu
。问题是,当显示PopupMenu
时,如果旋转设备,会收到以下错误消息。
e/windowmanager:android.view.windowleaked:活动
窗户漏水了
android.widget.popupWindows$popupdecorview{c44e7da视频…………身份证
0,0-392960}最初添加到这里
我发现了一个类似的问题(PopupMenu PopupWindow$PopupViewContainer leak),解决方案是调用dismiss()
PopupMenu
的onStop()
。但是,由于这不是活动而是ViewGroup
,所以我没有onStop()
。所以,我试图找到一个同名的事件,并找到了onDetachedFromWindow()
。我在dismiss()
中调用了onDetachedFromWindow()
。onDetachedFromWindow()
确实在屏幕旋转之前被调用,但我仍然收到窗口泄漏的错误消息。
我怎样才能解决这个问题?实际上,应用程序似乎工作得很好,我得到的只是日志中的错误消息。这个错误可以忽略吗?
最佳答案
也许这个答案对你来说太晚了,但我会分享我发现的,以防其他人感兴趣。PopupMenu
在内部使用PopupWindow
。当调用“cc>”时,它调用PopupMenu.dismiss()
但在指定退出转换时不立即删除PopupWindow.dismiss()
。尽管您在适当的时间调用了PopupWindow
,但窗口实际上并没有足够快地从层次结构中移除。它需要在您的活动被销毁之前删除,以避免出现此泄漏错误。我看不到立即解雇dismiss()
的方法。可能的解决方法是直接使用PopupMenu
而不是PopupWindow
,并在解雇前调用PopupMenu
。
关于android - 显示PopupMenu时旋转,获取android.view.WindowLeaked,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37323761/