Android性能優(yōu)化之利用LeakCanary檢測內(nèi)存泄漏及解決辦法

前言:

   最近公司C輪融資成功了,移動團隊準(zhǔn)備擴大一下,需要招聘Android開發(fā)工程師,陸陸續(xù)續(xù)面試了幾位Android應(yīng)聘者,面試過程中聊到性能優(yōu)化中如何避免內(nèi)存泄漏問題時,很少有人全面的回答上來。所以決定抽空學(xué)習(xí)總結(jié)一下這方面的知識,以及分享一下我們是如何檢測內(nèi)存泄漏的。我們公司使用開源框架LeakCanary來檢測內(nèi)存泄漏。

什么是內(nèi)存泄漏?

    有些對象只有有限的生命周期。當(dāng)它們的任務(wù)完成之后,它們將被垃圾回收。如果在對象的生命周期本該結(jié)束的時候,這個對象還被一系列的引用,這就會導(dǎo)致內(nèi)存泄漏。隨著泄漏的累積,app將消耗完內(nèi)存。

內(nèi)存泄漏造成什么影響?

    它是造成應(yīng)用程序OOM的主要原因之一。由于android系統(tǒng)為每個應(yīng)用程序分配的內(nèi)存有限,當(dāng)一個應(yīng)用中產(chǎn)生的內(nèi)存泄漏比較多時,就難免會導(dǎo)致應(yīng)用所需要的內(nèi)存超過這個系統(tǒng)分配的內(nèi)存限額,這就造成了內(nèi)存溢出而導(dǎo)致應(yīng)用Crash。

什么是LeakCanary?

      leakCanary是Square開源框架,是一個Android和Java的內(nèi)存泄露檢測庫,如果檢測到某個 activity 有內(nèi)存泄露,LeakCanary 就是自動地顯示一個通知,所以可以把它理解為傻瓜式的內(nèi)存泄露檢測工具。通過它可以大幅度減少開發(fā)中遇到的oom問題,大大提高APP的質(zhì)量。

     本篇不介紹如何使用LeakCanary,關(guān)于LeakCanary使用參考以下文章:

     1.LeakCanary: 讓內(nèi)存泄露無所遁形 
     2.LeakCanary 中文使用說明

LeakCanary捕獲常見內(nèi)存泄漏以及解決辦法

1.)錯誤使用單例造成的內(nèi)存泄漏

     在平時開發(fā)中單例設(shè)計模式是我們經(jīng)常使用的一種設(shè)計模式,而在開發(fā)中單例經(jīng)常需要持有Context對象,如果持有的Context對象生命周期與單例生命周期更短時,或?qū)е翪ontext無法被釋放回收,則有可能造成內(nèi)存泄漏,錯誤寫法如下:

網(wǎng)友評論