2014-04-02 38 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

如果我使用应用程序上下文(所有的时间)会怎样? –