RSIllegalArgumentException:Android 17上的Unsuported元素类型

时间:2016-09-17 20:45:26

标签: java android renderscript

我最近在Google Play上发布了我的应用。我检查了Firebase中的崩溃,其中一个异常数最多的群集是一个致命的例外,其中包含以下堆栈跟踪:

Caused by android.renderscript.RSIllegalArgumentException: Unsuported element type.
android.renderscript.ScriptIntrinsicBlur.create (ScriptIntrinsicBlur.java:50)
com.kayimapps.autocolorsplash_android.Util.getBlurredBitmap (Util.java:234)
com.kayimapps.autocolorsplash_android.activities.IntroActivity.onCreate (IntroActivity.java:83)
android.app.Activity.performCreate (Activity.java:5283)
android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1097)
android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2209)
android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2299)
android.app.ActivityThread.access$700 (ActivityThread.java:150)
android.app.ActivityThread$H.handleMessage (ActivityThread.java:1280)
android.os.Handler.dispatchMessage (Handler.java:99)
android.os.Looper.loop (Looper.java:137)
android.app.ActivityThread.main (ActivityThread.java:5283)
java.lang.reflect.Method.invokeNative (Method.java)
java.lang.reflect.Method.invoke (Method.java:511)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1102)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:869)
dalvik.system.NativeStart.main (NativeStart.java)

可以在堆栈跟踪中看到的getBlurredBitmap方法如下:

public static Bitmap getBlurredBitmap(Bitmap input, Context context)
{
    Bitmap result = null;
    try {
        RenderScript rsScript = RenderScript.create(context);
        Allocation alloc = Allocation.createFromBitmap(rsScript, input);

        ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rsScript, alloc.getElement());
        blur.setRadius(25);
        blur.setInput(alloc);

        result = Bitmap.createBitmap(input.getWidth(), input.getHeight(), input.getConfig());
        Allocation outAlloc = Allocation.createFromBitmap(rsScript, result);
        blur.forEach(outAlloc);
        outAlloc.copyTo(result);

        rsScript.destroy();
    }
    catch (RSIllegalArgumentException e)
    {
        FirebaseCrash.report(e);
    }
    return result;
}

我到处寻找这个例外,看看它的原因,但到目前为止我一无所获。有趣的是,这个例外仅在Android 17(4.2)的设备中引发,我测试应用程序的唯一设备是带有Android 17的三星Galaxy S3,在同一个地方没有例外。

我猜测由于RenderScript在GPU上运行,因此某些设备可能因为其硬件而无法支持它。提出这种例外的设备是各种各样的品牌设备,所以我不能真的责怪一家制造商。

有没有人知道为什么会发生这种情况,或者可能会指出在哪里寻找解决方案?

编辑:原来我是一个白痴,我使用的手机的操作系统版本是18,而不是17。但是Android 17设备上的问题仍然存在。

0 个答案:

没有答案