gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 09:47:27 25 4
gpt4 key购买 nike

我通过扩展 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com