请不要标记为重复
我在崩溃上经常收到此错误,但我找不到问题。我在这里或这里看到了它,但我的应用程序中没有任何 WebView。
我的应用程序中有一些正在处理某个日期的 AsyncTasks:从数据库中选择,比较并在完成后调用侦听器以更新 UI(我检查活动在需要更新 UI 时是否仍然可见)。如果用户有 10k 条记录要比较,则此处理时间可能会很长。
不得不提到的是,不同的设备制造商(更多关于三星)和不同的Android版本(更多关于Andorid 6.0 +)都会发生错误
我多次收到此错误,例如:
文件:守护进程.java:217
java.util.concurrent.TimeoutException: android.view.ThreadedRenderer.finalize() timed out after 10 seconds
1 at android.view.ThreadedRenderer.nDeleteProxy(Native Method)
2 at android.view.ThreadedRenderer.finalize(ThreadedRenderer.java:459)
3 at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:217)
4 at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:200)
5 at java.lang.Thread.run(Thread.java:818)
文件:守护程序.java:206
java.util.concurrent.TimeoutException: android.view.ThreadedRenderer.finalize() timed out after 10 seconds
1 at android.view.ThreadedRenderer.nDeleteProxy(Native Method)
2 at android.view.ThreadedRenderer.finalize(ThreadedRenderer.java:449)
3 at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:206)
4 at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:189)
5 at java.lang.Thread.run(Thread.java:818)
文件守护程序.java:210
java.util.concurrent.TimeoutException: android.view.ThreadedRenderer.finalize() timed out after 15 seconds
1 at android.view.ThreadedRenderer.nDeleteProxy(Native Method)
2 at android.view.ThreadedRenderer.finalize(ThreadedRenderer.java:427)
3 at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:210)
4 at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:193)
5 at java.lang.Thread.run(Thread.java:818)
等。。。
正如您链接到的一篇文章所描述的那样,这是由于垃圾回收对于具有本机代码实现的对象花费太长时间而生成的异常。 我遇到了这个异常,并通过查看产生此异常的源代码找到了解决方案java.lang.Daemons$FinalizerDaemon.finalizerTimedOut()
您可以在此处看到。
在finalizerTimedOut()
中,如果Thread.getDefaultUncaughtExceptionHandler() == null
,它会创建并记录一个TimeoutException()
,并以非零代码(System.exit(2);)
退出! 对于用户来说,这将看起来像一个FC! 若要防止出现这种情况,需要调用Thread.setDefaultUncaughtExceptionHandler()
来捕获和处理此异常。