LeakCanary还能这样????(自定义保存泄漏信息)

对于Android开发来说,用leakcanary来检测内存泄漏很是方便与快捷的。但是由于本人工作原因,LeakCanary用起来着实无法满足需求,因为我是开发机顶盒和车机的Android系统app,这个时候系统不发弹出Notifaciton,就无法看到内存泄漏的具体信息。有人会说看源码,在show提示Notification的之前,会保存当时分析的内存快照以及结果问题,如下:

LeakCanary还能这样????(自定义保存泄漏信息)_第1张图片

leakcanary是保存了相关信息,但是本人打开result的文件部分乱码,所有信息糅杂在一起,及其没办法分析。所以在此情况下,研读一下leakcanary源码流程,根据版本情况共汇总两种改法。

第一种(推荐)

偶然间发现在新版本中,leakcanary源码中的DisplayLeakService.java类中新加了一个空方法,如下:

LeakCanary还能这样????(自定义保存泄漏信息)_第2张图片

看注释,原来是可以集成此类复写此方法,留给有缘人发挥的啊,真是官方介绍里面也不提一下,小弟很难找到还有此天堂代码。废话不多说,上代码。

一、集成DisplayLeakService类,重写afterDefaultHandling()方法,实现自己的泄流信息保存
LeakCanary还能这样????(自定义保存泄漏信息)_第3张图片
LeakCanary还能这样????(自定义保存泄漏信息)_第4张图片

二、在manifest.xml文件中注册该service
image.png
三、比较重要,在Application中注册的时候要根据源码的来如下:
源码中如是写到:
LeakCanary还能这样????(自定义保存泄漏信息)_第5张图片
于是在自己的Application中:
LeakCanary还能这样????(自定义保存泄漏信息)_第6张图片

以上,大功告成。

第二种

在早期版本中,就只有老老实实的把源码下载下来(官方下载地址:[email protected]:square/leakcanary.git),如图:

LeakCanary还能这样????(自定义保存泄漏信息)_第7张图片

将红框中的module合并在一起。接下来就是保存我们自己的信息文件了,

一、修改就在AbstractAnalysisResultService.java中的sendResultToListener方法新增如下代码:
image.png

二、在AnalyzedHeap.java中新增save()方法:如下:
LeakCanary还能这样????(自定义保存泄漏信息)_第8张图片

就这样,很简单的完成了,保存路径可以随意更改,将此module引入自己的项目中,用法完全不用改变。

以上仅是自己的一点经验,如有不足之处请多多指教,谢谢。

你可能感兴趣的:(LeakCanary还能这样????(自定义保存泄漏信息))