【问题标题】:Android RenderScript FinalizerWatchdogDaemon Fatal ExceptionAndroid RenderScript FinalizerWatchdogDaemon 致命异常
【发布时间】:2013-10-18 11:19:53
【问题描述】:

我在我的应用程序中使用 RenderScript 来执行多项图像处理任务。

有时,我会随机得到以下异常:

10-10 15:27:04.479: E/AndroidRuntime(2113): FATAL EXCEPTION: FinalizerWatchdogDaemon
10-10 15:27:04.479: E/AndroidRuntime(2113): java.util.concurrent.TimeoutException: android.renderscript.Type.finalize() timed out after 10 seconds
10-10 15:27:04.479: E/AndroidRuntime(2113):     at android.renderscript.RenderScript.nObjDestroy(RenderScript.java:216)
10-10 15:27:04.479: E/AndroidRuntime(2113):     at android.renderscript.BaseObj.finalize(BaseObj.java:116)
10-10 15:27:04.479: E/AndroidRuntime(2113):     at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:187)
10-10 15:27:04.479: E/AndroidRuntime(2113):     at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:170)
10-10 15:27:04.479: E/AndroidRuntime(2113):     at java.lang.Thread.run(Thread.java:856)

我所有的 RenderScript-Calls 都包含在信号量中,以防止相同的脚本并行运行。 谁能告诉我这条消息的含义以及如何防止它?

【问题讨论】:

  • 您在哪个设备和操作系统版本上运行?您是否尝试过使用支持库?
  • 不,不支持库,使用 minimum-sdk 14 构建。不同的设备(Nexus、Asus Transformer、...),甚至是模拟器。

标签: java android renderscript


【解决方案1】:

你有一个运行时间很长的内核吗?

当 GC 删除 java 代码引用时,此线程正在尝试清理 RS 对象。如果有一个运行时间很长的内核,它可能会被阻塞足够长的时间来触发您所看到的。我们不允许在内核运行时由外部线程修改对象,因此实际上外部线程在内核完成之前被阻塞。

【讨论】:

  • 有什么办法可以调整超时时间吗?例如,如果我需要长时间运行的内核,我可以将其设置为 20 秒还是 30 秒?
猜你喜欢
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 2012-09-08
相关资源
最近更新 更多