android内存优化之图片压缩和缓存
由于手机内存的限制和网络流量的费用现在,我们在加载图片的时候,必须要做好图片的压缩和缓存。
图片缓存机制一般有2种,软引用和内存缓存技术。
1.压缩图片:压缩图片要既不能模糊,也不能拉伸图片。
图片操作的时候,最常用的是BitmapFactory,现在看看如何压缩图片。
Bitmapfactory.Options options= new BitmapFactory.Options();
options.inJustDecodeBounds = true;// 如果设置这个参数为ture,就不会给图片分配内存空间,但是可以获取到图片的大小等属性
2.软引用:只要有足够内存,就一直保持独享,直到内存吃紧并且没有强引用的时候回收对象。
主要用SoftReference,用法如下:
private Map<String,SoftReference<Bitmap> imageMap = new HasMap<String,SoftReference<Bitmap>>();
这里的key主要是图片的地址,可以是网络地址,也可以是SD卡上的图片地址。
3. 内存缓存技术:在android 中有一个叫LruCache class,是专门用来做图片缓存处理的。当缓存的图片到达了预先设定的阀值,那么近期使用次数最少的图片会被回收掉。所以首先要设置图片内存大小,然后设置LruCache里面的键值对,URL和图片,重写sizeOf,返回图片数量。
4. android 2.3以后GCC会更加倾向于回收软引用或者弱引用的对象,但是也不能缓存到本地,缓存到本地会容易造成OOM,所以最好是LruCache缓存,设定阀值,超过了就回收。