在使用 RenderScript 时创建 ScriptC 对象存在一些神秘问题。这是我的代码:
public class RenderScriptActivity {
private RenderScript mRS;
private ScriptC_kernel mScript = null;
private Allocation m1Allocation, m2Allocation,
m3Allocation, m4Allocation;
private Bitmap mBitmap;
private ImageView mView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_renderscript);
mView = (ImageView) findViewById(R.id.image_view);
}
@Override
protected void onResume() {
super.onResume();
initRenderScript();
}
@Override
protected void onPause() {
super.onPause();
releaseRenderScript();
}
private void initRenderScript() {
mRS = RenderScript.create(this);
int size = 320*240;
m1Allocation = Allocation.createSized(mRS, Element.I16(mRS), size);
m2Allocation = Allocation.createSized(mRS, Element.I16_4(mRS), size);
m3Allocation = Allocation.createSized(mRS, Element.I16_4(mRS), size);
mBitmap = Bitmap.createBitmap(1280, 720, Bitmap.Config.ARGB_8888);
m4Allocation = Allocation.createFromBitmap(mRS, mBitmap);
mScript = new ScriptC_kernel(mRS, getResources(), R.raw.kernel);
}
private void releaseRenderScript() {
m1Allocation.destroy();
m2Allocation.destroy();
m3Allocation.destroy();
m4Allocation.destroy();
// mScript.destroy();
mRS.finish();
}
}
还有我的内核(是的,它是空的):
#pragma version(1)
#pragma rs java_package_name(com.example.android.myrenderscript)
问题是,在第三次调用initRenderScript()
函数(即恢复应用程序、暂停、恢复、暂停和再次恢复)后,我的应用程序崩溃(SIGSEV)并出现错误:
backtrace:
#00 pc 00027034 /system/lib/libRS.so (android::renderscript::rsrClearObject(android::renderscript::Context const*, android::renderscript::ObjectBase**)+3)
#01 pc 00012c3b /system/lib/libRSDriver.so
#02 pc 00000668 <unknown>
此外,如果我使用mScript.destory()
方法(上面已评论),我的应用程序在第一次调用initRenderScript()
. 最重要的是,如果我只是评论创建ScriptC_kernel
对象的行,那么一切都很好。这就是为什么我想,这是创建ScriptC
对象的问题。
有没有机会,有人知道为什么会出现这个问题吗?
这里有什么奇怪的,只有当我从命令行(使用ant debug
命令,Ubuntu 14.04)构建应用程序时才会出现这个问题。当我使用 Android Studio 或 Eclipse 构建它时,一切正常。
我还应该提到,实际上不是应用程序本身崩溃(它包含少数活动),而是一个线程,我认为是 RenderScript 的。崩溃后,先前的活动再次被带到前台。
非常感谢任何帮助,并在此先感谢