加载较大的本地文件作为背景图时 防止内存溢出
2017-06-27 15:31
295 查看
尽量不要使用setImageBitmap或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中配置相应的图片资源, 否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。
https://tinypng.com 图片处理网址
参考:http://263229365.iteye.com/blog/1562924
因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。
如果在读取时加上图片的Config参数,可以跟有效减少加载的内存,从而跟有效阻止抛out of Memory异常
另外,decodeStream直接拿的图片来读取字节码了, 不会根据机器的各种分辨率来自动适应, 使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源, 否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。
/** * 以最省内存的方式读取本地资源的图片 * @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); }
https://tinypng.com 图片处理网址
参考:http://263229365.iteye.com/blog/1562924
相关文章推荐
- 加载文件到内存——sunpinyin使用较大词库之后卡的问题的解决
- android 加载图片防止内存溢出
- vs2010 单文档MFC 通过加载位图文件作为客户区背景
- C#将接受到的流写入文件的回调函数------一个防止内存溢出的方法
- android 加载大图片防止内存溢出
- vs2010 单文档MFC 通过加载位图文件作为客户区背景
- swift3.0,加载本地文件,防止崩溃
- struts上传文件防止内存溢出
- vs2010 单文档MFC 通过加载位图文件作为客户区背景
- ListView如何加载网络图片,防止内存溢出
- PHP远程下载大文件方法,防止内存溢出
- android 加载大图片防止内存溢出
- 防止加载图片内存溢出的方法
- Android学习笔记_51_转android 加载大图片防止内存溢出
- jdbc底层驱动加载数据机制之防止内存溢出(2)--Mysql
- jdbc底层驱动加载数据机制之防止内存溢出(2)--oracle
- Qt setStyleSheet 添加背景色/背景图片(取消背景色,读取本地文件作为背景色)
- Android学习笔记_51_转android 加载大图片防止内存溢出
- android 加载图片防止内存溢出
- Android(decode文件转成bitmap)使用BitmapFactory.Options解决加载大图片内存溢出