三级缓存指的是内存缓存、本地缓存、网络缓存。
内存缓存, 优先加载, 速度最快
本地缓存, 次优先加载, 速度快
网络缓存, 不优先加载, 速度慢,浪费流量
当我们使用内存缓存的时候,常常面临着内存溢出问题。
为此,Android默认给每个app只分配16M的内存。当我们创建对象的时候,
通常将对象放在堆中,引用放在栈中。引用分为以下四类:
强引用 垃圾回收器不会回收, java默认引用都是强引用
软引用 SoftReference 在内存不够时,垃圾回收器会考虑回收
弱引用 WeakReference 在内存不够时,垃圾回收器会优先回收
虚引用 PhantomReference 在内存不够时,垃圾回收器最优先回收
但是在Android2.3+, 系统会优先将SoftReference的对象提前回收掉, 即使内存够用。为此我们使用LruCache进行图片缓存。
LruCache构造方法传入一个最大值,会将内存控制在一定的大小内,
超出最大值时会自动回收,这个最大值开发者自己定。
还有可以用图片压缩原理。
实际开发中我们可以使用工具类来实现。
内存溢出解决方案:
内存溢出一般不容易出现,当在加载大图片时特别是用listview加载时容易出现内存溢出,
为了解决这个问题,我们用三种缓存。
内存缓存, 优先加载, 速度最快
本地缓存, 次优先加载, 速度快
网络缓存, 不优先加载, 速度慢,浪费流量
当我们使用内存缓存的时候,常常面临着内存溢出问题。
为此,Android默认给每个app只分配16M的内存。当我们创建对象的时候,
通常将对象放在堆中,引用放在栈中。引用分为以下四类:
强引用 垃圾回收器不会回收, java默认引用都是强引用
软引用 SoftReference 在内存不够时,垃圾回收器会考虑回收
弱引用 WeakReference 在内存不够时,垃圾回收器会优先回收
虚引用 PhantomReference 在内存不够时,垃圾回收器最优先回收
但是在Android2.3+, 系统会优先将SoftReference的对象提前回收掉, 即使内存够用。为此我们使用LruCache进行图片缓存。
LruCache构造方法传入一个最大值,会将内存控制在一定的大小内,
超出最大值时会自动回收,这个最大值开发者自己定。
还有可以用图片压缩原理。
实际开发中我们可以使用工具类来实现。
内存溢出解决方案:
内存溢出一般不容易出现,当在加载大图片时特别是用listview加载时容易出现内存溢出,
为了解决这个问题,我们用三种缓存。