對於Android開發來說,用leakcanary來檢測內存泄漏很是方便與快捷的。但是由於本人工作原因,LeakCanary用起來着實無法滿足需求,因爲我是開發機頂盒和車機的Android系統app,這個時候系統不發彈出Notifaciton,就無法看到內存泄漏的具體信息。有人會說看源碼,在show提示Notification的之前,會保存當時分析的內存快照以及結果問題,如下:
leakcanary是保存了相關信息,但是本人打開result的文件部分亂碼,所有信息糅雜在一起,及其沒辦法分析。所以在此情況下,研讀一下leakcanary源碼流程,根據版本情況共彙總兩種改法。
第一種(推薦)
偶然間發現在新版本中,leakcanary源碼中的DisplayLeakService.java類中新加了一個空方法,如下:
看註釋,原來是可以集成此類複寫此方法,留給有緣人發揮的啊,真是官方介紹裏面也不提一下,小弟很難找到還有此天堂代碼。廢話不多說,上代碼。
一、集成DisplayLeakService類,重寫afterDefaultHandling()方法,實現自己的泄流信息保存
二、在manifest.xml文件中註冊該service
三、比較重要,在Application中註冊的時候要根據源碼的來如下:
源碼中如是寫到:
於是在自己的Application中:
以上,大功告成。
第二種
在早期版本中,就只有老老實實的把源碼下載下來(官方下載地址:[email protected]:square/leakcanary.git),如圖:
將紅框中的module合併在一起。接下來就是保存我們自己的信息文件了,
一、修改就在AbstractAnalysisResultService.java中的sendResultToListener方法新增如下代碼:
二、在AnalyzedHeap.java中新增save()方法:如下:
就這樣,很簡單的完成了,保存路徑可以隨意更改,將此module引入自己的項目中,用法完全不用改變。
以上僅是自己的一點經驗,如有不足之處請多多指教,謝謝。