再次出现错误java.util.concurrent.TimeoutException:android.view.ThreadedRenderer.finalize()在10秒后超时

时间:2017-01-31 12:48:24

标签: java android

请勿将其标记为重复

我经常在崩溃时遇到这个错误,我找不到问题。我看到它herehere,但我的应用中没有任何WebView。

我在我的应用程序中有一些处理某些日期的AsyncTasks:从DB中选择,比较并调用监听器以在完成时更新UI(我检查当需要更新UI时活动是否仍然可见)。如果用户有10k的记录要比较,这个处理可能会很长。

不得不提到不同设备制造商(更多关于三星)和不同Android版本(更多关于Andorid 6.0 +)的错误发生了

我多次将此错误视为不同错误,例如:

  

文件:Daemons.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)
  

文件:Daemons.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)
  

文件Daemons.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)

等...

1 个答案:

答案 0 :(得分:0)

作为您链接到的帖子之一,这是一个异常,垃圾收集生成的异常对于具有本机代码实现的对象来说需要太长时间。我遇到了这个异常并通过查看生成此异常的源代码找到了一个解决方案java.lang.Daemons $ FinalizerDaemon.finalizerTimedOut(),您可以看到here

在finalizerTimedOut()中,如果Thread.getDefaultUncaughtExceptionHandler()== null,它创建并记录TimeoutException()并以非零代码退出(System.exit(2);)!对于用户来说,这看起来像FC!要防止这种情况,您需要调用Thread.setDefaultUncaughtExceptionHandler()来捕获并处理此异常。