在PopupMenu显示时旋转,获取android.view.WindowLeaked

时间:2016-05-19 12:51:04

标签: android android-widget android-menu android-viewgroup

我通过扩展ViewGroup创建了一个简单的自定义布局。我在Button上创建了PopupMenuinit()。如果按下按钮,则会显示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错误消息。

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

1 个答案:

答案 0 :(得分:0)

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