2014-04-02 67 views
0

這是我關於RenderScript的第三個問題,我已經用rs編寫了一個超過3個月的圖像處理項目。 R是強大的,我可以使用類似於OpenGLES着色器的並行內核,並且我可以編寫串行代碼來執行框模糊。太奇妙了!Renderscript AsyncTask#4 crash

但現在,我有一個新問題。

在用戶選擇應用哪種效果之前,通常會在按鈕上顯示帶動態縮略圖的效果。所以我爲每個按鈕的縮略圖創建一個線程,每個線程都有自己的rs和上下文。線程通過自己的rs和上下文創建和使用分配,因此不會出現像「使用具有不匹配上下文的對象」的錯誤。不幸的是,它發生了。

FATAL EXCEPTION: AsyncTask #4 
java.lang.RuntimeException: An error occured while executing doInBackground() 
at android.os.AsyncTask$3.done(AsyncTask.java:200) 
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
at java.lang.Thread.run(Thread.java:1027) 
Caused by: android.support.v8.renderscript.RSInvalidStateException: using object with mismatched context. 
at android.support.v8.renderscript.BaseObj.getID(BaseObj.java:66) 
at android.support.v8.renderscript.Script.setVar(Script.java:382) 
at com.xxxxxxxxxxx.xxxxxxxx.algorithms.filter.Script_BaseFilter.set_gTableTex(ScriptC_BaseFilter.java:280) 
…………(not important) 

我知道,我不能使用多線程渲染與OpenGLES質感,但我不讀RS這樣的事。

werridest的事情是,有時某個縮略圖中的某些像素線會被同一行中的另一個縮略圖像素替換!每次都不會發生崩潰,大多數情況下,大的原始圖像或需要很長時間處理的一個效果甚至會關閉整個程序的活動。

這是一個錯誤,或rs不能被多線程調用?

回答

1

該錯誤與多線程無關。

引起:android.support.v8.renderscript.RSInvalidStateException:使用具有不匹配上下文的對象。

這意味着RenderScript對象是在一個上下文中創建的,然後在不同的上下文中使用。這樣做是不合法的。每個上下文都有其獨特的一組對象。如果您需要在它們之間高效地移動數據,請在分配上使用USAGE_IO_INPUT & USAGE_IO_OUTPUT並將它們鏈接在一起。

+0

如果我使用應用程序上下文(所有的時間)會怎樣? –