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

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

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

E/WindowManager: android.view.WindowLeaked: Activity has leaked window android.widget.PopupWindow$PopupDecorView{c44e7da V.E...... ......ID 0,0-392,960} that was originally added here

我发现了类似的问题( PopupMenu PopupWindow$PopupViewContainer leak ),解决方案是调用 PopupMenu onStop()dismiss() 。但是,由于这不是一个 Activity,而是一个 ViewGroup,所以我没有 onStop()。因此,我试图找到一个类似名称的事件,并找到了onDetachedFromWindow()。我在 onDetachedFromWindow() 中调用了 dismiss()

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

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

最佳答案

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

关于android - 在 PopupMenu 显示时旋转,获取 android.view.WindowLeaked,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37323761/

相关文章:

java - Android - 从 HashMap 中获取值

android - 如何绕过 ICS 和 Jellybean 中不一致的 DatePicker 小部件

android - Android Widget ID 是否持久化

android - 如何在 View 底部制作菜单

android - 如何以编程方式触发/单击 Android 中的 MenuItem?

Android - Volley - 同步和异步 http 请求

android - 有什么方法可以检测视频是否可以在设备上播放?

android - 我要买一台新电脑,如何导出我的 Eclipse keystore ?请帮忙?

android - 如何在 android 中区分 480 * 800 和 480 * 854 屏幕分辨率的布局?

android - Activity 中的 OnOptionsItemSelected 在 fragment 中的 onOptionsItemSelected 之前被调用。其他方式可能吗?