1. 程式人生 > >android使用Leaks檢測記憶體洩漏

android使用Leaks檢測記憶體洩漏

Leaks 記憶體洩漏檢測工具使用

debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'

在Application中新增

LeakCanary.install(this);

並且確保你的app處於除錯模式,如下圖
這裡寫圖片描述


當切換到release版本的時候,leakcanary-debug不會被打包.所以切換到release之後不用對leakcanary做註釋或者刪除等操作.
現在就可以開始使用了,重新編譯你的工程,執行在模擬器或真機上.
在各個頁面中測試,如果存在記憶體洩漏的情況,leaks會彈出通知提醒你檢視.
在leaks中會有詳細的洩漏說明,如產生記憶體洩漏的大小,產生記憶體洩漏的頁面和相關的資訊。
這裡寫圖片描述
記憶體洩漏詳情:
這裡寫圖片描述

最後有一些關於記憶體洩漏的建議:
為了避免上下文相關的記憶體洩漏,記住以下幾點:
不要長期引用context-activity(引用一個活動應該有相同的生命週期活動本身)
使用getApplicationContext而不是context或activity試試
避免非靜態內部類的一個活動如果你不控制自己的生命週期,使用靜態內部類,讓一個弱引用來傳遞,並且記住,垃圾收集器對於記憶體洩漏並不保險。

下面說幾個作者遇到的記憶體洩漏的情況以及解決方案:
使用百度地圖LocationClient.在Activity被銷燬時呼叫

if (mLocClient != null){
            mLocClient.unRegisterLocationListener(myListener);
            mLocClient.stop();
        }

使用友盟分享登入時, 傳遞getApplicationContext

第三方庫如果需要傳入Activity的時候,傳遞一個弱引用進去, 可以避免記憶體洩漏,如下:

Reference<HomeActivity> reference
= new WeakReference(getActivity()); new ShareAction(reference.get()).setDisplayList(displaylist);

在Handler中容易造成記憶體洩漏,最好使用弱引用方式,要麼,在Activity銷燬的時候清空所有的handler棧。

在使用RxJava的時候也可能會出現記憶體洩漏,可以使用RxLifecycler來解決。

關於部落格中的內容有任何疑問歡迎加群討論:283272067

相關推薦

Vc 檢測記憶體洩漏

https://docs.microsoft.com/zh-cn/visualstudio/debugger/finding-memory-leaks-using-the-crt-library?view=vs-2017   啟用記憶體洩漏檢測 檢測記憶體洩漏是 C/c + + 偵錯程式和 C

Visual Studio中檢測記憶體洩漏的方法

Visual Studio中檢測記憶體洩漏的方法 #include <iostream> //可以定位到發生記憶體洩露 所在的檔案和具體那一行,用於檢測 malloc 分配的記憶體 #define _CRTDBG_MAP_ALLOC #include <s

用 LeakCanary 檢測記憶體洩漏

轉載自:https://academy.realm.io/cn/posts/droidcon-ricau-memory-leaks-leakcanary/ 我們的 App 曾經遇到很多的記憶體洩漏導致 OutOfMemoryError 的崩潰,一些甚至是在生產環境。Square 的 Pierr

Instruments的Leaks檢測記憶體洩漏

一,使用Leaks開啟APP,操作APP; 二,配置Leaks; 在Leaks欄目下選擇Cycles & Roots和Call Tree進行分析; 1,Cycles & Roots; 2,C

VC使用CRT除錯功能檢測記憶體洩漏

轉載自https://www.cnblogs.com/kex1n/archive/2011/04/27/2030753.html 方法一: 檢測記憶體洩漏的基本工具是偵錯程式和CRT除錯堆函式。為了使用除錯堆函式,在你的程式中你必須含有下面的說明: #define _CRTDBG_MAP_A

為什麼使用LeakCanary檢測記憶體洩漏

為什麼要使用LeakCanary? 不再需要的物件依然被引用,導致物件被分配的記憶體無法被回收,這就是記憶體洩漏的原因。 例如:一個Activity例項物件在呼叫了onDestory方法後是不再被需要的,如果儲存了一個引用Activity物件的靜態域,將導致Ac

iOS總結-檢測記憶體洩漏庫-MLeaksFinder原始碼解析

MLeaksFinder是WeRead團隊開源的一款檢測iOS記憶體洩漏的AOP框架。 優點:無侵入性  可以構建洩漏堆疊  有白名單機制  擴充套件性 其他一些特殊處理 主要涉及到的是基類NSObject+MemoryLeak.h類別裡面,- (BOOL)wi

linux valgrind 檢測記憶體洩漏

1.模擬記憶體洩漏的情況 2.編譯程式 g++ -g -o file file.c,一定要加-g 3.安裝valgrind   sudo apt-get install valgrind 4.執行程式valgrind --leak-check

linux工具之檢測記憶體洩漏-valgrind

0.前言 記憶體洩漏是c++程式常見的問題了,特別是服務類程式,當系統模組過多或者邏輯複雜後,很難通過程式碼看出記憶體洩漏; valgrind是一個開源的,檢測c++程式記憶體洩漏有效工具,編譯時加上-g選項可以定位到程式碼行,同時還檢查‘野指標’,檢查malloc與fre

Linux mtrace命令檢測記憶體洩漏

*這篇來學習一下Linux中的一個命令——mtrace,它是怎麼用的呢?一起來看看。。。→_→* 記憶體洩漏程式碼 #include <stdio.h> int main() {

android使用Leaks檢測記憶體洩漏

Leaks 記憶體洩漏檢測工具使用 debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2' releaseCompile 'com.squareup.leakcanary:

使用 Android Studio 檢測記憶體洩漏與解決記憶體洩漏問題

  本文在騰訊技術推文上 修改 釋出。     http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.195040.TASKID&ADUIN=913337456&a

如何用dmalloc檢測記憶體洩漏(原創)

三下五除二就給說完了1.從www.dmalloc.com下載一個rpm包(你也可以下載原始碼包,本人比較懶 :) )2.安裝3.export DMALLOC_OPTIONS=log=logname,debug=0x3注:logname是你要生成記錄的檔名4.在你需要檢測的原始

檢測記憶體洩漏的常見工具-LeakCanary

見到這個標題有經驗的開發者可能要吐槽我是標題黨了,特別是從Eclipse時代走過來的開發者,以為我一要開始貼那張像**一樣的MAT記憶體模型圖或者AndroidStudio中Monitors下的實時記憶體佔用圖,又要開始分析那一條條剪不斷理還亂的記憶體引用鏈,然後費盡九牛

(轉)使用windbg檢測記憶體洩漏

轉載地址:緣起:作為C++程式設計師,檢測記憶體洩漏是非常痛苦的事情。尤其是看著程式的記憶體在一直增長,你卻無能為力。此時,windbg可以用來檢測記憶體洩漏。配置windbg: 配置symbol檔案路徑: “SRV*d:\symbols*http://msdl.micros

vs中檢測記憶體洩漏的方法

使用vs的記憶體檢測有以下幾種方法。 在debug模式下以F5執行: 方法一: #define CRTDBG_MAP_ALLOC     #include <stdlib.h> #include <crtdbg.h> //在入口函式中包含

VS檢測記憶體洩漏,定位洩漏程式碼位置方法

1、什麼是記憶體洩漏? 記憶體洩漏指的是在程式裡動態申請的記憶體在使用完後,沒有進行釋放,導致這部分記憶體沒有被系統回收,久而久之,可能導致程式記憶體不斷增大,系統記憶體不足……引發一系列災難性後果;(關於程式申請記憶體分配方式,詳見:記憶體分配方式) 2、零容忍 排除

vs2008 使用Visual Leak Detector檢測記憶體洩漏

http://hi.baidu.com/maydaygmail/item/8ea6ebef87ca9103560f1dfe 靈活自由是C/C++語言的一大特色,而這也為C/C++程 序員出了一個難題。當程式越來越複雜時,記憶體的管理也會變得越加複雜,稍有不慎就會

Instruments使用之使用Leaks檢測記憶體洩漏

上一篇文章我介紹了Instruments的工具分類和基本使用方法,今天我再來給大家說說Leaks的使用方法。 在早期的iOS開發中,並沒有ARC模式,只有MRC模式,必須由開發人員自己管理記憶體,過程

AFNetWorking3.0記憶體洩漏問題,xcode檢測記憶體洩漏

最近在寫小專案的過程中發現app在執行過程中記憶體總是會增加,沒有上限一樣到五六十兆。然後本能的開啟xcode的product--profile--leak 監測一下記憶體洩漏的地方。結果發生一堆記憶體洩漏,不過都是當我獲取網路資料的時候。 點選leaks--call