使用三级缓存目的
- 速度快,可以提升用户体验度
- 避免重复请求网络,重复加载,节省流量
三级缓存简介
- 内存缓存, 优先加载, 速度最快(加载到内存,就容易出现OOM)
- 本地缓存, 次优先加载, 速度快
- 网络缓存, 不优先加载, 速度慢,浪费流量
内存溢出OOM
Android默认给每个app只分配16M的内存(个别的不是)
java中的引用
- 强引用 垃圾回收器不会回收, java默认引用都是强引用
- 软引用 SoftReference 在内存不够时,垃圾回收器会考虑回收
- 弱引用 WeakReference 在内存不够时,垃圾回收器会优先回收
- 虚引用 PhantomReference 在内存不够时,垃圾回收器最优先回收
注意: Android2.3+, 系统会优先将SoftReference的对象提前回收掉, 即使内存够用
所以:一般都只使用强引用,弱引用太弱了
LruCache
least recentlly use 最少最近使用算法
会将内存控制在一定的大小内, 超出最大值时会自动回收, 这个最大值开发者自己定
如何去做三级缓存?
作为一个资深小白,可以尝试下自己写,但是加载到内存,还是会OOM,所以我还是老老实实用第三方了。
图片处理的第三方:(这里只说我大概知道的)
Xutils:四大模块里面有图片模块,有点老了
universal-image-loader:问了几个朋友,公司用这个的比较多,我也用的这个
Glide : google搞的,貌似很屌
Fresco:facebook搞的,貌似也很屌
http://www.fresco-cn.org/
以上大概说了几个自带缓存的第三方,对哪个感兴趣,就百度怎么用