安卓内存泄漏

安卓内存泄漏是安卓面试常见的问题,也是安卓内存优化的一个重要途径。内存泄漏的根本原因是因为一个无用的对象继续被其它对象持有,导致该无用对象无法被系统回收,从而产生内存泄漏。具体在开发过程中,有如下几个常见原因:

1.单例模式。单例模式由于其静态特性使得其生命周期非常长,在该单例对象被销毁之前,如果它持有的一个对象没有用处了,仍然被该单例持有,那么如果不手动清除该无用对象,会造成内存泄漏。解决的办法是把上下文设置为application的级别,这样就不会出现内存泄漏的问题。

2.非静态的内部类、匿名类。由于非静态内部类、匿名类会持有外部类的引用,如果我们在外部类定义了一个静态的内部类或者一个匿名类的应用,这样在外部类应该被销毁时,由于被内部类或者匿名类持有而无法被销毁,这样也会造成内存泄漏。解决办法是将内部类封装成静态。

3.handler。如果在子线程使用handler发送消息,当activity被销毁时,如果还有未被处理的消息,那么此时的handler是不会被销毁的,会直到消息处理完毕,所以这样会造成内存泄漏。解决的办法是在activity得 ondestroy方法里面将消息置为null。或者创建一个静态类继承handler,他持有的对象使用弱引用处理,这样也可以防止内存泄漏

4.各类资源使用时未关闭造成的内存泄漏。像常见的数据库未关闭,广播没有反注册,IO流使用完毕没有关闭都不造成内存泄漏。解决办法是在使用完毕之后关闭这些数据。

5.使用ListView。使用listview没有使用缓存策略,即convertView,这样也会造成内存泄漏。解决办法是使用缓存策略。

6.使用集合。在使用集合时,添加元素是一个对象的引用,完毕之后,该集合仍然持有对象的引用导致内存泄漏。解决办法是将集合清空再置空。

7.webview。使用完webview后,如果不销毁该对象也会造成内存泄漏,解决办法,在ondestroy方法里面销毁webview对象。

8.MVP模式。在MVP模式里面,P层要持有V和M层的引用,如果P层在做一些耗时操作,此时的Activity退出,那么也会造成内存泄漏,解决办法,在activity的ondestroy方法里面将P层的view引用置空就行了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

第九区大虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值