我通过扩展ViewGroup创建了一个简单的自定义布局。我在Button上创建一个PopupMenu和一个init()。如果按下按钮,则会显示PopupMenu。问题是,当显示PopupMenu时,如果旋转设备,会收到以下错误消息。
e/windowmanager:android.view.windowleaked:活动
窗户漏水了
android.widget.popupWindows$popupdecorview{c44e7da视频…………身份证
0,0-392960}最初添加到这里
我发现了一个类似的问题(PopupMenu PopupWindow$PopupViewContainer leak),解决方案是调用dismiss()PopupMenuonStop()。但是,由于这不是活动而是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/

10-10 08:50