android内存泄漏的集中情况

常见的内存泄露场景

1、类的静态变量持有大数据对象、如Bitmap

     静态变量会长期维持对对象的引用,阻止垃圾回收

2、非静态内部类的静态实例

     非静态内部类会维持一个到外部内实例的引用,如果非静态内部类的实例是静态的就会间接长期维持着外部类的引用,阻止回收

3、资源对象未关闭,如Cursor File Socket等,这种情况应该在finally中关闭

4、注册对象未反注册

     未反注册会导致观察者列表里维持着对象的引用,阻止垃圾回收

5、Handler临时性内存泄露

Handler通过发送Message与主线程交互,Message发出之后是存储在MessageQueue中的,有些Message也不是马上就被处理的。在Message中存在一个 target,是Handler的一个引用,如果Message在Queue中存在的时间越长,就会导致Handler无法被回收。如果Handler是非静态的,则会导致Activity或者Service不会被回收。

由于AsyncTask内部也是Handler机制,同样存在内存泄漏的风险。

此种内存泄露,一般是临时性的。

预防

     不要维持到Activity的长久引用,对activity的引用应该和activity本身有相同的生命周期。

     尽量使用application context代替activity context

Activity中尽量不要使用非静态内部类和用WeakReference代替


转载于:https://my.oschina.net/u/1177694/blog/549533

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值