Android进阶7:内存优化——LeakCanary原理分析
好的项目离不开健壮的代码,对于想要写出健壮的代码,解决内存泄漏是必须的。 对于LeakCanary,对于大多人是不陌生的,也就是检测内存泄漏的工具。可能在代码中我们会这样引入LeakCanary: //检查leakCanary和APP是否在同一个进程,如果是同一个进程就返回,不在同一个进程,就注册。 //因为不再同一个进程,不会对APP进程造成消极影响(如:APP进程变慢或者out of memory) if (LeakCanary.isInAnalyzerProcess(this)) { // This process is dedicated to LeakCanary for heap analysis. // You should not init your app in this process. return; } LeakCanary.install(this); 简简单单的两句话,背后的原理却是一大堆。 在开始源码之前,先说几个知识点: 强引用,软引用,弱引用,GC线程扫描它所管辖的内存区域时,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。 垃圾回收器是一个优先级很低的线程,即使有弱引用的存在,也不一定会执行。 我们手动调用GC,不一定成功调用垃圾回收器,因为我们仅仅是建议JVM执行GC,最终执不执行,还是得看JVM的最终决策。