Android - WindowManager引起的“窗口数量超过最大值300”导致崩溃

6

我在我的日志软件中看到了这个错误报告,但无法确定它是由什么引起的,或者这个300限制是指什么...是指查看次数还是可能显示在列表中的项数...

以下是我从我的日志中提取的全部内容:

window count is over max 300
android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:430)
android.view.WindowManagerImpl.addView(WindowManagerImpl.java:133)
android.widget.PopupWindow.invokePopup(PopupWindow.java:1688)
android.widget.PopupWindow.showAtLocation(PopupWindow.java:1408)
android.widget.PopupWindow.showAtLocation(PopupWindow.java:1374)

我对Dialog或PopupWindow做了一些研究和调试,但无法重现这个问题。 如有任何想法或建议,将不胜感激。

编辑 我又找到了一个不同的堆栈跟踪版本的此问题...

window count is over max 300 
android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:430)
android.view.WindowManagerImpl.addView(WindowManagerImpl.java:133)
android.app.ActivityThread.handleResumeActivity(ActivityThread.java:5322)
android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:54)
android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:2438)
android.os.Handler.dispatchMessage(Handler.java:106)
android.os.Looper.loopOnce(Looper.java:226)
android.os.Looper.loop(Looper.java:313)
android.app.ActivityThread.main(ActivityThread.java:8663)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)

编辑2

这似乎只发生在Android 12操作系统上。

编辑3

这似乎也发生在Android 13上,但错误消息略有不同。

window count is over max!!

@CommonsWare 是的,应用程序中有一些函数会显示 Toast,但它们并不经常使用。 - RH201
1
你能解决这个问题吗?我在Android 12中遇到了与你在EDIT 1中发布的相同的堆栈跟踪。 - César Ynga
1
@CésarYnga 目前还没有解决方案。在 Android 问题跟踪器中打开了一个错误报告 https://issuetracker.google.com/issues/260731729... 看看是否有进展。 - RH201
自从2022年12月以来,我也像编辑3中一样收到了这个堆栈跟踪(窗口计数超过最大值!!)。Android Dolphin | 2021.3.1 补丁1,targetSdkVersion为33。在设备上运行 Android 13 (SDK 33)。 - guenter47
请告诉我们您是否已经解决了这个问题。 - code ketty
显示剩余5条评论
2个回答

2
我遇到的问题与您完全相同。在我的情况下,这不是一个错误,而是一段糟糕的代码,导致创建了数百个对话框。简单地说,它进入了无限循环。
我不确定这是否对您有所帮助,但对我造成错误的原因是当系统销毁活动时(仅在某些三星设备上发生)。然后,当用户将应用程序恢复到活动状态时,这会创建具有重复侦听器等的重复viewModel。一切都变得非常混乱。
因此,我猜测您的应用程序要么没有正确清理某些内容,要么以其他方式陷入了无限循环,从而创建了数百个对话框和窗口。检查围绕那些行发生的代码。这并不是一个简单的解决方案。

这与我在此问题的日志中看到的相符。应用程序总是在生命周期的早期崩溃,几乎在启动后立即崩溃。因此,在关闭应用程序时可能存在一些对话框或可能未正确终止的倒计时。我将使用LeakCanary进行一些测试,看看是否可以在应用程序关闭后隔离任何泄漏。 - RH201

-1

我不确定您是否仍然面临这个问题。

实际上,当您打开超过300个Windows时会出现这种情况。

检查是否存在for或无限循环。


很遗憾,如果事情那么简单就好了,但现实并非如此。 - guenter47

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接