2013-10-10 98 views
3

我在我的應用程序中使用RenderScript來執行多個圖像處理任務。Android RenderScript FinalizerWatchdogDaemon致命異常

有時候,我隨機得到以下異常:

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通話是通過信號量封閉,以防止同樣的腳本運行並行。 有人可以告訴我這封郵件的含義以及如何防止它?

+0

你在運行什麼設備和操作系統版本?你有沒有嘗試過使用支持庫? –

+0

不,不支持庫,使用最小-sdk編譯14.不同的設備(Nexus,Asus Transformer,...),甚至是仿真器。 – TSGames

回答

2

你有很長的運行內核嗎?

當GC刪除java代碼引用時,此線程試圖清除RS對象。如果運行的內核很長,它可能會被阻塞足夠長的時間以觸發你所看到的內容。我們不允許在內核運行時通過外部線程修改對象,因此實際上外部線程被阻塞直到內核完成。

+1

有什麼方法可以調整超時時間嗎?例如,如果我需要長時間運行的內核,我可以將它設置爲20或30秒嗎? – TSGames