男儿欲遂平生志,六经勤向窗前读。这篇文章主要讲述Android 内存泄露相关的知识,希望能为你提供帮助。
一. 内存泄漏与内存溢出
内存溢出out of memory:指的是程序在申请时,没有足够的内存空间供其使用,出现oom,比如申请了一个integer,但给它存了long才能存下的数,就是内存溢出,内存溢出通俗讲就是内存不够用。
内存泄露memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后的果很严重,无论多少内存迟早会占光。
二. 内存泄露的原因
1) handler引起的内存泄露
解决:将handler声明成静态内部类,就不会持有外部类SecondActivity的引用,其生命周期就和外部类无关
如果handler里面需要context的话,可以通过弱引用的方式引用外部类
【Android 内存泄露】2) 单例模式引起的内存泄露
解决:context是ApplicationContext,由于ApplicationContent的生命周期和APP一致,不会导致内存泄露
3) 内静态内部类创建静态实例引起内存泄露
解决:把内部类修改为静态内部类
4)非静态匿名内部类引起的内存泄露
解决:将匿名内部类设置为静态的
5)注册/反注册未成对使用引起的内存泄露
解决:注册广播接接收器,EventBus等,记得解绑
6)资源对象没有关闭引起的内存泄露
解决:那些资源不使用的时候,记得调用相应的类似close(),destory(),recycle(), release()等释放
7)集合对象没有及时清理引起的内存泄露
解决:通常会吧一些对象装入到集合中,当不使用的时候,一定要记得及时清理集合,让相关对象不再被引用
推荐阅读
- AndroidThread和HandlerThread的差别
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappi
- 小记--------spark的Master的Application注册机制源码分析及Master的注册机制原理分析
- 高级T-SQL进阶系列 上篇(使用 APPLY操作符)
- 微信小程序获取二维码(直接上代码)https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
- Taro自定义Modal对话框组件|taro仿微信android弹窗
- Android外接USB扫码枪
- Androidkiller在夜神模拟器上编译安装
- 笔记本经常见故障处理办法大全