在Android开发过程中,我们经常碰到的情况就是在我们不清楚为什么情况下,程序突然出现崩溃了。其中有一类日志相信大家都经常碰到过,这类日志就是伯父相关的日志。这类日志除了我们知道的位图操作的时候会经常导致,还有一种隐藏的较深的原因就是内存泄露(内存泄漏)。
内存泄露产生原因和影响:原因:当一个对象不再需要的时候,本该被GC回收时,但是因为另一个正在使用的对象持有它导致不能正常的被回收,本该被回收的对象不能回收,还存留在堆内存中,此时就产生了内存泄露。影响:Android系统能够为每个应用程序分配的内存是有限的,当一个应用程序中产生的内存泄露过多的时候,会难免导致应用程序需要的内存超过限额而导致内存溢出使得应用程序崩溃。内存泄露的检测方式
推荐使用LeakCanary工具来检测应用程序是否存在内存泄露.LeakCanary是由广场开源的一款轻量级的第三方内存泄漏检测工具,当检测到程序中产生内存泄漏时,它将以最直观的方式告诉我们哪里产生了内存泄漏和导致谁泄漏了而不能被回收。
如何避免内存泄露
单例的静态特性使得其生命周期和应用的生命周期一样长。
如图,我们先声明一个单例对象: