关于图片加载优化的小技巧
2015-11-18 17:07
423 查看
关于图片加载出现OOM异常,是我们Android开发人员经常需要考虑的问题。最近把公司项目中用到的优化小技巧做一个总结出来,方便以后使用。
1、尽量压缩图片占用内存。
在使用Bitmap.Config这个变量的时候,它里面会有4个枚举值,分别是:
Bitmap.Config ARGB_4444:每个像素占四位,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位
Bitmap.Config ARGB_8888:每个像素占四位,即A=8,R=8,G=8,B=8,那么一个像素点占8+8+8+8=32位
Bitmap.Config RGB_565:每个像素占四位,即R=5,G=6,B=5,没有透明度,那么一个像素点占5+6+5=16位
Bitmap.Config ALPHA_8:每个像素占四位,只有透明度,没有颜色。
A:透明度
R:红色
G:绿
B:蓝
默认情况下,使用的是Bitmap.Config ARGB_8888。但是通过比较我们发现,该值是最占内存的。
Bitmap.Config ARGB_4444和Bitmap.Config RGB_565所占用的内存都只有它的一半。
Bitmap.Config RGB_565的优点在于,对图片本身的失真比较小,缺点是没有透明色,不能适用于有透明色的图片。前几天就碰到用Bitmap.Config RGB_565,背景出现大黑框的情况。
Bitmap.Config
ARGB_4444刚好相反,有透明色,但是每一种色值却失真比较严重,一般情况下不推荐。
Bitmap.Config
ALPHA_8占用内存和默认差不多,不推荐。
2、处理图片缓存了。如果需要频繁展示的图片,比如适配器中的图片,那么我们就需要缓存在内存中,但是如果只是一般的比如帖子或者商品里面的图片,只需要缓存在sd卡中就可以大大降低对内存的消耗。
1、尽量压缩图片占用内存。
在使用Bitmap.Config这个变量的时候,它里面会有4个枚举值,分别是:
Bitmap.Config ARGB_4444:每个像素占四位,即A=4,R=4,G=4,B=4,那么一个像素点占4+4+4+4=16位
Bitmap.Config ARGB_8888:每个像素占四位,即A=8,R=8,G=8,B=8,那么一个像素点占8+8+8+8=32位
Bitmap.Config RGB_565:每个像素占四位,即R=5,G=6,B=5,没有透明度,那么一个像素点占5+6+5=16位
Bitmap.Config ALPHA_8:每个像素占四位,只有透明度,没有颜色。
A:透明度
R:红色
G:绿
B:蓝
默认情况下,使用的是Bitmap.Config ARGB_8888。但是通过比较我们发现,该值是最占内存的。
Bitmap.Config ARGB_4444和Bitmap.Config RGB_565所占用的内存都只有它的一半。
Bitmap.Config RGB_565的优点在于,对图片本身的失真比较小,缺点是没有透明色,不能适用于有透明色的图片。前几天就碰到用Bitmap.Config RGB_565,背景出现大黑框的情况。
Bitmap.Config
ARGB_4444刚好相反,有透明色,但是每一种色值却失真比较严重,一般情况下不推荐。
Bitmap.Config
ALPHA_8占用内存和默认差不多,不推荐。
2、处理图片缓存了。如果需要频繁展示的图片,比如适配器中的图片,那么我们就需要缓存在内存中,但是如果只是一般的比如帖子或者商品里面的图片,只需要缓存在sd卡中就可以大大降低对内存的消耗。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories