LeakCanary還能這樣????(自定義保存泄漏信息)

對於Android開發來說,用leakcanary來檢測內存泄漏很是方便與快捷的。但是由於本人工作原因,LeakCanary用起來着實無法滿足需求,因爲我是開發機頂盒和車機的Android系統app,這個時候系統不發彈出Notifaciton,就無法看到內存泄漏的具體信息。有人會說看源碼,在show提示Notification的之前,會保存當時分析的內存快照以及結果問題,如下:

save.png

leakcanary是保存了相關信息,但是本人打開result的文件部分亂碼,所有信息糅雜在一起,及其沒辦法分析。所以在此情況下,研讀一下leakcanary源碼流程,根據版本情況共彙總兩種改法。

第一種(推薦)

偶然間發現在新版本中,leakcanary源碼中的DisplayLeakService.java類中新加了一個空方法,如下:

image.png

看註釋,原來是可以集成此類複寫此方法,留給有緣人發揮的啊,真是官方介紹裏面也不提一下,小弟很難找到還有此天堂代碼。廢話不多說,上代碼。

一、集成DisplayLeakService類,重寫afterDefaultHandling()方法,實現自己的泄流信息保存
image.png
image.png

二、在manifest.xml文件中註冊該service
image.png
三、比較重要,在Application中註冊的時候要根據源碼的來如下:
源碼中如是寫到:
image.png
於是在自己的Application中:
image.png

以上,大功告成。

第二種

在早期版本中,就只有老老實實的把源碼下載下來(官方下載地址:[email protected]:square/leakcanary.git),如圖:

image.png

將紅框中的module合併在一起。接下來就是保存我們自己的信息文件了,

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

二、在AnalyzedHeap.java中新增save()方法:如下:
image.png

就這樣,很簡單的完成了,保存路徑可以隨意更改,將此module引入自己的項目中,用法完全不用改變。

以上僅是自己的一點經驗,如有不足之處請多多指教,謝謝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章