SoftReference 和 WeakReference

在android 提供内存优化的方案,SoftReference 和 WeakReference 

平时见得最大的是图片的处理,如比较有名的开源框架Universal_Image_Loader

而在java中分为四大类,引用分为四大类:强引用HardReference、弱引用WeakReference、软引用SoftReference和虚引用PhantomReference。

它们的区别也很明显,HardReference对象是即使虚拟机内存吃紧抛出OOM,也不会导致这一引用的对象被回收;而WeakReference等更适合于一些数量不多,但体积稍微庞大的对象,在这四个引用中,它是最容易被垃圾回收的;而我们对于显示类似Android Market中每个应用的AppIcon时可以考虑使用SoftReference来解决内存不至于快速回收,同时当内存短缺面临JavaVM崩溃抛出OOM前时,软引用将会强制回收内存,最后的虚引用一般没有实际意义,仅仅观察GC的活动状态,对于测试比较实用同时必须和ReferenceQueue一起使用。

用Map集合缓存软引用的Bitmap对象
HashMap<String,SoftReference<Bitmap>>cache=new HashMap<String,SoftReference<Bitmap>>();
//软引用的Bitmap对象
SoftReference<Bitmap> bitmapcache =newSoftReference<Bitmap>(bitmap);
//添加该对象到Map中使其缓存
imageCache.put("1",softRbitmap);
..
.
//从缓存中取软引用的Bitmap对象
SoftReference<Bitmap> bitmapcache_ =imageCache.get("1");
//取出Bitmap对象,如果由于内存不足Bitmap被回收,将取得空

Bitmap bitmap_ = bitmapcache_.get();


你可能感兴趣的:(SoftReference 和 WeakReference)