android中setImageResource加载大图片出现oom解决方案
来源:互联网 发布:电气原理图 软件 仿真 编辑:程序博客网 时间:2024/05/08 23:13
ImageView加载图片时,有时会出现OOM
imageView.setImageResource(imageId);
解决方法
/**
* 以最省内存的方式读取本地资源的图片
*
* @param context
* @param resId
* @return
*/
public static Bitmap readBitMap(Context context, int resId) {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inPurgeable = true;
opt.inInputShareable = true;
// 获取资源图片
InputStream is = context.getResources().openRawResource(resId);
return BitmapFactory.decodeStream(is, null, opt);
}
Bitmap bitmap=readBitMap(LoginActivity.this,imageId);
imageView.setImageBitmap(bitmap);
那是为什么,会导致oom呢:
原来当使用像 imageView.setBackgroundResource,imageView.setImageResource, 或者 BitmapFactory.decodeResource 这样的方法来设置一张大图片的时候,这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。
因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。如果在读取时加上图片的Config参数,可以跟有效减少加载的内存,从而跟有效阻止抛out of Memory异常。
另外,需要特别注意:
decodeStream是直接读取图片资料的字节码了, 不会根据机器的各种分辨率来自动适应,使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源,否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。
- android中setImageResource加载大图片出现oom解决方案
- android中setImageResource加载大图片出现oom解决方案
- Android中setImageResource加载大图片出现oom解决方案
- android中setImageResource加载大图片出现oom解决方案
- android中setImageResource加载大图片出现oom解决方案
- android中setImageResource加载大图片出现oom解决方案
- android 中解决gridview 等加载大图片出现oom的问题
- Android中加载大图片OOM(图片缩放)
- Android中加载大图片放置OOM异常
- Android加载大图片OOM异常解决
- Android加载大图片OOM异常解决
- 【Android】大图片加载时OOM
- android 高效加载大图片,避免OOM
- Android 高效加载大图片避免OOM
- Android 大图片加载 避免OOM
- Android高效加载大图片,防止OOM
- Android 高效加载大图片避免OOM
- android显示加载大图片OOM问题
- 文件下载-SpringMVC中测试
- android开发No Launcher activity found! 解决方法
- JS基础——图片切换的综合实例
- java 操作 poi 解析、读取 Excel 文件
- JQuery 分割函数(split)的用法和定义
- android中setImageResource加载大图片出现oom解决方案
- 第九周项目6 委派任务
- 站在巨人的肩膀上,C++开源库大全
- tomcat体系架构
- Linux驱动开发九:按键中断+定时去抖
- YII 数据库查询
- iOS基础(一)命名规范
- 备份我的文件列表
- HeidiSQL工具导出导入MySQL数据