软引用介绍:

  1. SoftReference:软引用–>当虚拟机快要内存不足时,将会回收它指向的对象;需要获取对象时,可以调用get方法获取持有对象,要判空。
    A SoftReference should be cleared and enqueued as late as possible, that is, in case the VM is in danger of running out of memory.

  2. SoftReference多用作来实现缓存机制(不过自己很少使用这个-_-||)。可以避免自己去删除哪个对象,交给GC的算法去删除。

弱引用介绍:

  1. WeakReference:弱引用–>随时可能会被垃圾回收器回收,不一定要等到虚拟机内存不足时才强制回收。要获取对象时,同样可以调用get方法获取对象,同样要判空。
    A WeakReference may be cleared and enqueued as soon as is known to be weakly-referenced.一旦GC发现它是弱引用,就会回收它。但是GC线程优先级低,并且不会经常触发,所以会保留一段时间。

  2. WeakReference一般用来防止内存泄漏,要保证内存被虚拟机回收。

  3. 经常使用的还有WeakHashMap。

示例:

  1. 使用WeakReference经典例子:
    因为Handler造成的内存泄露:Android Handler Memory Leaks
    附一篇可以辅助理解的文章:Darkeet内存泄露

  2. 在Snackbar源码中也使用了WeakReference,用来管理Snackbar。

  3. UniversalImageLoader中的BaseMemoryCache,使用弱引用来作为一级缓存,让GC去处理一级缓存中的Bitmap回收;同时提供了LruMemoryCache,自己去处理一级缓存中的Bitmap回收机制。

  4. UniversalImageLoader中的ViewAware,利用WeakReference来 Warp View 防止内存泄露。这块对ImageView包装的真的很好。


参考
理解Java中的弱引用
Java 7之基础 - 强引用、弱引用、软引用、虚引用
官方文档

更多相关文章

  1. Android(安卓)webview-tips
  2. Android(安卓)Studio 抽屉效果控件Toolbar+DrawerLayout
  3. Android插件化之ContentProvider
  4. Android笔试和面试精华题
  5. 加载大Bitmap处理资料集锦
  6. 修改Android(安卓)hosts文件
  7. JobScheduler 详解一
  8. Android(安卓)gallery实现图片的左右循环旋转源码分享
  9. android好博客

随机推荐

  1. android之Intent的七大属性
  2. Android(安卓)Studio 一个module引用另一
  3. Android中inflate简介
  4. Android内存泄漏检测工具使用手册
  5. Android(安卓)自定义View控件,实现跟随手
  6. Android(安卓)setXfermode 遮罩 实现圆形
  7. Android与Js调用
  8. 编写高效的Android代码(译)
  9. 简单分析Android里面的TimePicker控件
  10. Android(安卓)Fragment 剖析 - 01