android 内存泄露原因与解决办法

一.context被长期持有,常见于单例模式

解决办法:1.用 applicationContext 取代 activity  2.activity onDestroy 的时候置空 context


二.cursor,IO,bitmap,网络 各种流忘记关闭


三.注册监听器忘记解除注册


四.android sdk 自身 bug


五.handler

解决办法:1.activity onDestroy 的时候清除所有的 msg 或 runnable  2.handler 写成外部类(或静态内部类)同时弱引用 activity    3.在 workThread 中使用 handler


六.内部类或匿名内部类长期持有外部类引用

解决办法:尽量避免使用非静态的匿名内部类或内部类,或者用弱引用持有外部对象


七.最好将变量作用域设置为最小


八.记得在程序退出前将集合里的对象 clear


九.谨慎使用 static 关键字,尤其对于 context 与 bitmap


十.webview

当我们不要使用WebView对象时,应该调用它的destory()函数来销毁它


十一.广播泄露:手动注册广播时,记住退出的时候要unregisterReceiver()

十二,activity 的匿名内部类线程持有外部 activity(配置改变引起的尤为严重,activity 持有的 view 及其相关的资源文件都不会被回收,损失惨重)

十三,僵尸线程

考虑是否真的需要使用线程。用 loader 执行短暂的后台异步操作、用 service做耗时操作

十四,建议在 fragment 中完成耗时操作(Handling Configuration Changes with Fragments)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值