Android RenderScript FinalizerWatchdogDaemon致命exception

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

有时候,我会随机获得以下exception:

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都被信号量包围,以防止同一个脚本并行运行。 任何人都可以告诉我这条消息的含义以及我如何预防它?

你有一个很长的内核吗?

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