软引用和弱引用

背景: 代码中应用到AsyncTask,由于所在activity需要被打开较多(条目数)次,为了避免OOM所以要进行优化,在网上找了很多资料,大体就是说内部类会有外部类的引用,即: 当activity销毁的时候,由于AsyncTask的实例拥有activity的引用,所以activity所持有的资源不会立即释放,造成内存泄露.为了解决这个问题,在网上搜集了很多资料:

1)资源文件以及activity中用到的属性在onDestroy中置空(null)

2)在AsyncTask中使用activity的弱引用

经过测试,第二个方法,可以很好的解决内存泄露问题,所以总结一下.


1. SoftReference:软引用–>当虚拟机内存不足时,将会回收它指向的对象;需要获取对象时,可以调用get方法获得上下文对象(把软引用看做一个较强的弱引用).

2. WeakReference:弱引用–>随时可能会被垃圾回收器回收,不一定要等到虚拟机内存不足时才强制回收。要获取对象时,同样可以调用get方法。

方法: 将继承自AsyncTask的子类声明成static类型,添加构造方法,传入activity的实例,在内部,activity的接收时:

private static classQueryTaskextendsAsyncTask {

         privateWeakReferenceactivity;

        publicQueryTask(QcYanShouListActivity activity) {

                this.activity=newWeakReference(activity);

       }

....

}

在静态内部类里面使用activity.get()获取上下文对象,就很容易实现了.

内存优化的主题恒久不变,需要持之以恒的寻找方法总结经验.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 想必很多朋友对OOM(OutOfMemory)这个错误不会陌生,而当遇到这种错误如何有效地解决这个问题呢?今天我们...
    lyd0108阅读 515评论 0 1
  • 整理一些常见的Android面试题(针对于2~3年开发经验中所遇到的问题) synchronized锁静态方法和非...
    appzy阅读 2,349评论 4 18
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,020评论 25 708
  • 心理咨询师是一群什么人来的啊? 没接触心理咨询的人心底总有着这莫名的疑惑,看似好高逼格?会催眠?会看穿人心?会精神...
    Psychonline阅读 292评论 0 2
  • 相遇免不了离别,离开总会有遇见。 狗伍心里只知道他的家没了,小时候三老大和他说过老五的事情,他知道他只有去找老五。...
    Jzzzz阅读 477评论 0 2