我使用RenderScript进行模糊处理和其他操作.
在大多数手机上都可以正常工作.在某些手机上,我随机得到以下异常:
android.renderscript.RSInvalidStateException:
Received a message from the script with no message handler installed. at android.renderscript.RenderScript$MessageThread.run(RenderScript.java:1087)
很难复制它,但是在Crashlytics上,我看到它在Hudl2上发生了75%,在Asus上发生了17%,在Acer上发生了8%.所以所有便宜的手机.
有谁知道原因是什么以及如何解决?
这是在Jellybean上运行的代码
@Override
protected Bitmap blurBitmap(final Bitmap bitmap, final Bitmap argbBitmap, final Bitmap blurredBitmap) {
final RenderScript renderScript = RenderScript.create(mContext);
final ScriptIntrinsicBlur script = ScriptIntrinsicBlur.create(renderScript, Element.U8_4(renderScript));
// Allocate memory for Renderscript to work with
final Allocation input = Allocation.createFromBitmap(renderScript, argbBitmap);
final Allocation output = Allocation.createFromBitmap(renderScript, blurredBitmap);
script.setInput(input);
script.setRadius(mRadius);
script.forEach(output);
output.copyTo(blurredBitmap);
renderScript.destroy();
bitmap.recycle();
argbBitmap.recycle();
return blurredBitmap;
}
解决方法:
我已经在一些旧设备上看到了,这是一个错误.这不是上面代码中的错误.
但是,上面的代码存在一个主要问题.您确实真的不想每次执行小操作时都创建和销毁RS上下文.对于应用程序的生命周期,应该执行一次此操作.重用上下文将使您获得主要的性能优势.它还将保护您免受所看到的错误的影响,因为仅在应用程序崩溃时才可能发生.
然后,它继续给您带来问题,您可以通过安装消息处理程序来解决该问题,以吸收退出时的零星消息.
标签:renderscript,android 来源: https://codeday.me/bug/20191120/2044784.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。