内存泄漏,就是内存缩小
内存泄漏 ,可以这样理解, 一个对象持久引用,即持久占用内存,又不能及时被释放 ,将导致内存泄露的风险
简单地说,就是一块内存被持久占有,总内存空间减小了
内存空间减小, 导致的问题:
设备就会越来越卡,因为没有足够的空间让程序来运行, 直到内存数据溢出, 然后程序就会挂掉,再跟着操作系统也可能无响应
在Android中,
例如: 1 Broadcast广播动态注册,这种注册方式也叫非常驻型广播,受到生命周期的影响,退出页面后,就不会收到广播,我们通常运用在更新UI方面。这种注册方式优先级较高。最后需要解绑,否则会内存泄露
2 Handler 引起的内存泄漏。
解决:将Handler声明为静态内部类,就不会持有外部类SecondActivity的引用,其生命周期就和外部类无关,
如果Handler里面需要context的话,可以通过弱引用方式引用外部类
3 非静态内部类创建静态实例引起的内存泄漏。
例如在Adapter类中,一般有一个内部类 ViewHolder
解决:把内部类修改为静态的就可以避免内存泄漏了
内存泄露检测工具 ------>LeakCanary
LeakCanary本质上是一个基于MAT进行Android应用程序内存泄漏自动化检测的的开源工具,我们可以通过集成LeakCanary提供的jar包到自己的工程中,一旦检测到内存泄漏,LeakCanary就好dump Memory信息,并通过另一个进程分析内存泄漏的信息并展示出来,随时发现和定位内存泄漏问题,而不用每次在开发流程中都抽出专人来进行内存泄漏问题检测,极大地方便了Android应用程序的开发。