一. 内存泄漏与内存溢出
内存溢出out of memory:指的是程序在申请时,没有足够的内存空间供其使用,出现oom,比如申请了一个integer,但给它存了long才能存下的数,就是内存溢出,内存溢出通俗讲就是内存不够用。
内存泄露memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后的果很严重,无论多少内存迟早会占光。
二. 内存泄露的原因
1) handler引起的内存泄露
解决:将handler声明成静态内部类,就不会持有外部类SecondActivity的引用,其生命周期就和外部类无关
如果handler里面需要context的话,可以通过弱引用的方式引用外部类
2) 单例模式引起的内存泄露
解决:context是ApplicationContext,由于ApplicationContent的生命周期和APP一致,不会导致内存泄露
3) 内静态内部类创建静态实例引起内存泄露
解决:把内部类修改为静态内部类
4)非静态匿名内部类引起的内存泄露
解决:将匿名内部类设置为静态的
5)注册/反注册未成对使用引起的内存泄露
解决:注册广播接接收器,EventBus等,记得解绑
6)资源对象没有关闭引起的内存泄露
解决:那些资源不使用的时候,记得调用相应的类似close(),destory(),recycle(), release()等释放
7)集合对象没有及时清理引起的内存泄露
解决:通常会吧一些对象装入到集合中,当不使用的时候,一定要记得及时清理集合,让相关对象不再被引用