1.咱们先说说为什么要使用图片的三级缓存机制
移动端app显示的图片还是蛮多的,如应用商场商品的图片。如果不进行三级缓存机制的处理,对用户来说是一个很大的损失,现在数据流量还是蛮贵的。
2.什么是三级缓存机制
网络缓存:不优先加载,加载慢,费流量
本地缓存:次优先加载, 加载速度快
内存缓存:优先加载,加载的速度超快。
当访问网络的时候,首先要判断内存里是否有 这个缓存如果有就加载显示,如果没有就看本地缓存是否有该缓存,如果有加载显示,如果没有进行网络请求。
3.网络缓存简单就是进行网络请求,本地缓存就是就该链接的内容保存到本地,这里我们说的重点是内存缓存。
内存缓存注意的一个点就是防止内存溢出的问题。
为什么会造成内存溢出呢?? 因为手机系统为应用提供的内存是16M或24M,不过不同手机品牌的手机分配的内存大小不一样。
android系统加载图片的时候是解析图片的像素信息,然后将每一个像素信息保存到内存中。
图片大小=图片的总像素*每个像素点的大小
例如一张1920x1080的JPG图片,在Android 系统中是以ARGB格式解析的,即一个像素需占用4个字节,图片的大小 =1920x1080x4=7M
实现方法:通过hashMap<string ,Bitmap> 键值对来保存图片,key为URL,bitmap为要保持的信息。强引用很容易造成内存的泄露。我们采用弱引用。
通过hashMap<String, SoftReference<Bitmap>>为引用对象,(垃圾回收器会自动回收软引用对象)但是从系统2.3以后系统会优先考虑回收弱引用的对象。所以我们要用
软引用对象,LruCache<String,Bitmap> 使用最少最近使用算法,会将内存控制在一定的大小,超出部分,采用最近最少使用算法进行回收。