對于Android開發(fā)來說,用leakcanary來檢測內(nèi)存泄漏很是方便與快捷的扛伍。但是由于本人工作原因筷畦,LeakCanary用起來著實無法滿足需求,因為我是開發(fā)機頂盒和車機的Android系統(tǒng)app刺洒,這個時候系統(tǒng)不發(fā)彈出Notifaciton鳖宾,就無法看到內(nèi)存泄漏的具體信息。有人會說看源碼逆航,在show提示Notification的之前鼎文,會保存當時分析的內(nèi)存快照以及結(jié)果問題,如下:
leakcanary是保存了相關(guān)信息因俐,但是本人打開result的文件部分亂碼拇惋,所有信息糅雜在一起,及其沒辦法分析抹剩。所以在此情況下撑帖,研讀一下leakcanary源碼流程,根據(jù)版本情況共匯總兩種改法澳眷。
第一種(推薦)
偶然間發(fā)現(xiàn)在新版本中胡嘿,leakcanary源碼中的DisplayLeakService.java類中新加了一個空方法,如下:
看注釋钳踊,原來是可以集成此類復寫此方法衷敌,留給有緣人發(fā)揮的啊,真是官方介紹里面也不提一下拓瞪,小弟很難找到還有此天堂代碼缴罗。廢話不多說,上代碼吴藻。
一瞒爬、集成DisplayLeakService類,重寫afterDefaultHandling()方法沟堡,實現(xiàn)自己的泄流信息保存
二侧但、在manifest.xml文件中注冊該service
三、比較重要航罗,在Application中注冊的時候要根據(jù)源碼的來如下:
源碼中如是寫到:
于是在自己的Application中:
以上禀横,大功告成。
第二種
在早期版本中粥血,就只有老老實實的把源碼下載下來(官方下載地址:git@github.com:square/leakcanary.git)柏锄,如圖:
將紅框中的module合并在一起酿箭。接下來就是保存我們自己的信息文件了,
一趾娃、修改就在AbstractAnalysisResultService.java中的sendResultToListener方法新增如下代碼:
二缭嫡、在AnalyzedHeap.java中新增save()方法:如下:
就這樣,很簡單的完成了抬闷,保存路徑可以隨意更改妇蛀,將此module引入自己的項目中,用法完全不用改變笤成。
以上僅是自己的一點經(jīng)驗评架,如有不足之處請多多指教,謝謝炕泳。