工具:MAT+Android Studio Profiler
Profiler主要负责捕获内存快照,MAT主要负责引用分析。
一些直观的内存泄漏用Profiler就好,当然这个需要自己去定位内存泄漏代码。Profiler适合用于比较复杂的引用,不易推测出泄漏的地方,MAT能很好地展示引用链,帮助排查泄漏。
使用方法:
结合自己的应用来说,我在MainActivity中借助Profiler手动重复GC若干次,然后点击dump java heap生成内存快照,然后按照包的形式进行显示,很显然SplashActivity内存没有被释放掉,我推测是加载广告造成的。
为了确定此泄露是加载广告造成的,试着用MAT分析引用。
Leak suspects 是MAT推测的内存泄漏的地方。
很明显是MyAdvertisement引用了MainActivity。解决完此问题又截取一次内存快照如下:
在下面MAT的内存泄漏推测中都没有找到以上内存泄漏说明问题已经解决。