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)
問題は、関数の3 回目の呼び出し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 でビルドすると、すべて正常に動作します。
また、実際にはアプリケーション自体がクラッシュするのではなく (いくつかのアクティビティが含まれています)、1 つのスレッドが RenderScript のものであると思われます。クラッシュ後、以前のアクティビティが再び前面に表示されます。
助けていただければ幸いです。事前に感謝します