【Android】常見的內(nèi)存泄漏場景分析

前言

如果在內(nèi)存泄漏發(fā)生后再去找原因并修復(fù)會(huì)增加開發(fā)的成本,最好在編寫代碼時(shí)就能夠很好地考慮內(nèi)存問題,寫出更高質(zhì)量的代碼,這里列出一些常見的內(nèi)存泄漏場景,在以后的開發(fā)過程中需要避免這類問題。

場景

  • 資源性對象未關(guān)閉。比如Cursor、File文件等,往往都用了一些緩沖,在不使用時(shí),應(yīng)該及時(shí)關(guān)閉它們。

  • 注冊對象未注銷。比如事件注冊后未注銷,會(huì)導(dǎo)致觀察者列表中維持著對象的引用。

  • 類的靜態(tài)變量持有大數(shù)據(jù)對象。

  • 非靜態(tài)內(nèi)部類的靜態(tài)實(shí)例。

  • Handler臨時(shí)性內(nèi)存泄漏。如果Handler是非靜態(tài)的,容易導(dǎo)致Activity或Service不會(huì)被回收。

  • 容器中的對象沒清理造成的內(nèi)存泄漏。

  • WebView。WebView存在著內(nèi)存泄漏的問題,在應(yīng)用中只要使用一次WebView,內(nèi)存就不會(huì)被釋放掉。

監(jiān)控

除此之外,內(nèi)存泄漏可監(jiān)控,常見的就是用LeakCanary第三方庫,這是一個(gè)檢測內(nèi)存泄漏的開源庫,使用非常簡單,可以在發(fā)生內(nèi)存泄漏時(shí)告警,并且生成leak tarce分析泄漏位置,同時(shí)可以提供Dump文件進(jìn)行分析。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容