Android中的软引用、弱引用
2016-03-22 23:01
513 查看
软引用介绍:
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.
SoftReference多用作来实现缓存机制(不过自己很少使用这个-_-||)。可以避免自己去删除哪个对象,交给GC的算法去删除。
弱引用介绍:
WeakReference:弱引用–>随时可能会被垃圾回收器回收,不一定要等到虚拟机内存不足时才强制回收。要获取对象时,同样可以调用get方法获取对象,同样要判空。A WeakReference may be cleared and enqueued as soon as is known to be weakly-referenced.一旦GC发现它是弱引用,就会回收它。但是GC线程优先级低,并且不会经常触发,所以会保留一段时间。
WeakReference一般用来防止内存泄漏,要保证内存被虚拟机回收。
经常使用的还有WeakHashMap。
示例:
使用WeakReference经典例子:因为Handler造成的内存泄露:Android Handler Memory Leaks
附一篇可以辅助理解的文章:Darkeet内存泄露
在Snackbar源码中也使用了WeakReference,用来管理Snackbar。
UniversalImageLoader中的BaseMemoryCache,使用弱引用来作为一级缓存,让GC去处理一级缓存中的Bitmap回收;同时提供了LruMemoryCache,自己去处理一级缓存中的Bitmap回收机制。
UniversalImageLoader中的ViewAware,利用WeakReference来 Warp View 防止内存泄露。这块对ImageView包装的真的很好。
参考
理解Java中的弱引用
Java 7之基础 - 强引用、弱引用、软引用、虚引用
官方文档
相关文章推荐
- Android数据库框架
- Android动画一:帧动画
- Android Studio找不到R类的几种可能
- Android加载网页输入框无法弹出输入法
- Android Sensor流程
- Android ListView同一个item显示2列的实现方法(仿2列商品列表)
- [android] 显示意图激活另外一个activity
- Android单选对话框的创建
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android Studio依赖包aar使用全攻略!
- android 双击事件的实现
- Android Material Design之Toolbar与Palette实践
- Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源码
- android颜色指列表
- android中RecyclerView使用自定义的列表布局
- Android——加载模式
- Android百度地图点聚合功能
- Android MediaServer初始化流程
- android颜色color.xml设置
- Android中实现在手机屏幕上拖动View(如拖动图片)