Android實戰——LeakCanary檢測記憶體流失

來源:互聯網
上載者:User

標籤:ati   fill   介面   text   android   alt   iss   個數   檔案   

本篇文章包括以下內容:

  • 前言
  • 記憶體流失的簡介
  • 記憶體溢出的簡介
  • LeakCanary的配置與使用
  • 結語

記憶體流失對於初學者們可能是一個陌生的詞語,但是卻頻頻發生於自己的軟體上,只不過自己不知道而已。同理,記憶體溢出也是一個道理。而記憶體流失和記憶體溢出常常是面試的考題,所以早點掌握是必不可少的

記憶體流失是指:對象在它有限的生命週期結束時,它們將被記憶體回收,如果在回收時,這個對象還被一系列的引用,導致該對象不會被回收,那麼就會導致記憶體流失。隨著泄漏的累積,應用將消耗完記憶體,應用的流暢性就會大大減弱

常見的記憶體流失有:

  1. 靜態變數引用導致記憶體流失
  2. 屬性動畫未及時關閉導致的記憶體流失

涉及到記憶體流失,當然也逃不過記憶體溢出的內容

記憶體溢出是指:程式要求的記憶體,超出了系統所能分配的範圍,從而發生溢出。Android應用程式的預設最大記憶體值為16M,如果你使用的記憶體超過最大值,則會導致應用報錯

常見的記憶體溢出有:

  1. 圖片過大導致記憶體溢出

LeakCanary是square公司開發出來的檢測記憶體流失的神器,他可以嵌入到我們的應用中,協助我們自動檢測記憶體流失

在項目的gradle中添加對LeakCanary的依賴

首先,需要建立一個類繼承自Application,為了讓我們LeakCanary在全域的Activity中能夠起作用

接著,在Manifests檔案中指定該Application

最後,就是在Application中直接配置我們的LeakCanary

到此我們的LeakCanary就已經嵌入成功,就剩測試了

我們採用靜態變數的記憶體流失來作為我們的測試結果,建立一個類,該類的作用可以儲存一個Activity對象到一個ArrayList中,讓Activity一直存在

做好了記憶體流失類之後,就在我們的主介面中直接使用該類,並將主介面的Activity存放在ArrayList中

這個時候,我們就已經類比了記憶體流失了,接著,就可以運行程式進行測試了

我們運行程式進入主介面,那麼主介面的Activity就被儲存起來了,軍訓心得這個時候是沒什麼事情的,因為主介面的Activity還被引用,並不會發生記憶體流失。接著,我們退出主介面,按道理是:退出主介面Activity,其生命週期就被結束了,該Activity必須被系統回收,但是我們還留了一手,將它儲存起來了,那麼等待一段時間後,就會在通知欄收到LeakCanary的通知資訊

這個時候,記憶體流失報告就出來了,點擊通知資訊,進入記憶體流失報告分析

結果分析得:

第一部分(ActivityPool類的activities變數)由於第二部分(ArrayList中的某個數組)和第三部分(數組中的某個對象) 導致第四部分(LeakCanaryActivity類的執行個體instance)泄露

這樣我們就可以很容易的定位到記憶體流失的部分

上面說到為什麼要在關閉Activity時,等待一段時間才會出現記憶體流失報告呢?

原因是:LeakCanary會監聽所有Activity的生命週期,並且在Activity的onDestory函數結束後,將該Activity添加到記憶體流失監控隊列中。接著,在後台線程中檢測這個引用是否被清除,如果沒有將會發生GC操作(記憶體回收),如果引用仍然沒有清除,將heap記憶體dump到一個.hprof檔案並存放在手機系統裡,應用會開啟另一個進程來分析該.hprof檔案,最後匯出泄漏引用鏈,傳回應用程式中,通過推送推送出資訊

LeakCanary的使用並不難,重要的是如何排除記憶體流失的問題,可能大部分問題還是需要在實戰中才能摸索出來,這裡只是舉一例子,不過通過這篇之後,相信你對記憶體流失和溢出都有一個大概的瞭解,對待類似面試題應該是沒什麼問題了

Android實戰——LeakCanary檢測記憶體流失

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.