LeakCanary——直白的展現Android中的內存泄露

之前碰到的OOM問題,終于很直白的呈現在我的眼前:我嘗試了MAT,但是發現不怎么會用。直到今天終于發現了這個新工具:

當我們的App中存在內存泄露時會在通知欄彈出通知:

這里寫圖片描述

當點擊該通知時,會跳轉到具體的頁面,展示出Leak的引用路徑,如下圖所示:

這里寫圖片描述

LeakCanary 可以用更加直白的方式將內存泄露展現在我們的面前。

以下是我找到的學習資料,寫的非常棒:
1、LeakCanary: 讓內存泄露無所遁形
2、LeakCanary 中文使用說明

AndroidStudio (官方)上使用LeakCanary 請移步:
https://github.com/square/leakcanary

Eclipse 上使用LeakCanary 請移步我的:
https://github.com/SOFTPOWER1991/LeakcanarySample-Eclipse

Android studio (自己弄的)上使用LeakCanary也可以看這個:

leakcanarySample_androidStudio

工程包括:

  1. LeakCanary庫代碼
  2. LeakCanaryDemo示例代碼

使用步驟:

  1. 將LeakCanary import 入自己的工程

  2. 添加依賴:

    compile project(':leakcanary')

  3. 在Application中進行配置

    public class ExampleApplication extends Application { ...... //在自己的Application中添加如下代碼 public static RefWatcher getRefWatcher(Context context) { ExampleApplication application = (ExampleApplication) context .getApplicationContext(); return application.refWatcher; } //在自己的Application中添加如下代碼 private RefWatcher refWatcher; @Override public void onCreate() { super.onCreate(); ...... //在自己的Application中添加如下代碼 refWatcher = LeakCanary.install(this); ...... } ..... } 
  4. 在Activity中進行配置

public class MainActivity extends AppCompatActivity { ...... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //在自己的應用初始Activity中加入如下兩行代碼 RefWatcher refWatcher = ExampleApplication.getRefWatcher(this); refWatcher.watch(this); textView = (TextView) findViewById(R.id.tv); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startAsyncTask(); } }); } private void async() { startAsyncTask(); } private void startAsyncTask() { // This async task is an anonymous class and therefore has a hidden reference to the outer // class MainActivity. If the activity gets destroyed before the task finishes (e.g. rotation), // the activity instance will leak. new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { // Do some slow work in background SystemClock.sleep(20000); return null; } }.execute(); } } 

?

  1. 在AndroidMainfest.xml 中進行配置,添加如下代碼
        <serviceandroid:name="com.squareup.leakcanary.internal.HeapAnalyzerService"android:enabled="false" android:process=":leakcanary" /> <service android:name="com.squareup.leakcanary.DisplayLeakService" android:enabled="false" /> <activity android:name="com.squareup.leakcanary.internal.DisplayLeakActivity" android:enabled="false" android:icon="@drawable/__leak_canary_icon" android:label="@string/__leak_canary_display_activity_label" android:taskAffinity="com.squareup.leakcanary" android:theme="@style/__LeakCanary.Base" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

轉載于:https://www.cnblogs.com/ldq2016/p/6635783.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253005.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253005.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253005.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

老司機做VR視頻,需要什么樣的全景相機?

做為一個在全景內容領域摸爬滾打一年有余的老司機&#xff0c;經歷了太多的坑。最近有不少朋友轉行進入這個領域&#xff0c;問我買什么樣的相機好。我現在項目太多&#xff0c;根本沒空詳盡解答。所以寫下這篇文章&#xff0c;不懂得自己看吧。 說白了&#xff0c;買什么樣子…

域乎曹勝虎:傳統互聯網“生病”了

11月17日&#xff0c;2018&#xff08;第12屆&#xff09;創業周暨全球創業周中國站在上海盛大召開&#xff0c;由上海域乎信息技術有限公司&#xff08;以下簡稱“域乎”&#xff09;承辦的區塊鏈專場論壇——《區塊鏈產業應用賦能精英論壇》成功舉辦&#xff0c;吸引了眾多業…

xml的方式配置AOP:Aspect Oriented Programming

在某些類中, 什么時機, 做什么事情 切入點(point-cut): 在某些類中(Class<?>[] itfc new Class<?>[] { IStudentService.class }) 通知: 什么時機, 做什么事情(InvocationHandler的invoke方法) 切面: 切入點 通知 織入(weaver): Proxy.newProxyInstance: 把切入…

[No0000112]ComputerInfo,C#獲取計算機信息(cpu使用率,內存占用率,硬盤,網絡信息)...

github地址&#xff1a;https://github.com/charygao/SmsComputerMonitor 軟件用于實時監控當前系統資源等情況&#xff0c;并調用接口&#xff0c;當資源被超額占用時&#xff0c;發送警報到個人手機&#xff1b;界面模擬Console的顯示方式&#xff0c;信息緩沖大小由配置決定…

I2C總線之(一)---概述

概述&#xff1a;IC 是Inter-Integrated Circuit的縮寫&#xff0c;發音為"eye-squared cee" or "eye-two-cee" , 它是一種兩線接口。 IC 只是用兩條雙向的線&#xff0c;一條 Serial Data Line (SDA) &#xff0c;另一條Serial Clock (SCL)。 SCL&#xf…

js中級(1)

動畫(1) Css樣式提供了運動 過渡的屬性transition 從一種情況到另一種情況叫過渡 Transition:attr time linear delay&#xff1b; Attr 是變化的屬性 Time 是花費的時間 Linear 變化的速度 Delay 是延遲 復習background:url() no-repeat 50% 50% red; Background-image Ba…

I2C總線之(二)---時序

一、協議 1.空閑狀態 I2C總線總線的SDA和SCL兩條信號線同時處于高電平時&#xff0c;規定為總線的空閑狀態。此時各個器件的輸出級場效應管均處在截止狀態&#xff0c;即釋放總線&#xff0c;由兩條信號線各自的上拉電阻把電平拉高。 2.起始位與停止位的定義&#xff1a; 起始信…

微信小程序設置底部導航欄目方法

微信小程序底部想要有一個漂亮的導航欄目&#xff0c;不知道怎么制作&#xff0c;于是百度找到了本篇文章&#xff0c;分享給大家。 好了 小程序的頭部標題 設置好了&#xff0c;我們來說說底部導航欄是如何實現的。 我們先來看個效果圖 這里&#xff0c;我們添加了三個導航圖標…

HTTP協議(3)瀏覽器的使用之查看源碼

在做CTF的Web類題目時&#xff0c;推薦使用Firefox瀏覽器。下面介紹一些在解題過程中關于瀏覽器的常用技巧。首先就是查看源碼。在做Web題目時&#xff0c;經常需要查看網站源碼&#xff0c;有的flag直接就藏在源碼中&#xff0c;有些題目則是在源碼中給出提示和線索&#xff0…

Autofac IoC容器基本使用步驟【1】

原文&#xff1a;http://www.bkjia.com/Asp_Netjc/888119.html 【原文中有一個地方報錯&#xff0c;下面已修改】 一.基本步驟: 1.設計適合控制反轉(IoC)的應用程序 2.給應用程序Autofac 引用. 3.注冊組件. 4.創建一個Container以備后用. 5.從Container創建一個 lifetime scop…

I2C總線之(三)---以C語言理解IIC

為了加深對I2C總線的理解&#xff0c;用C語言模擬IIC總線&#xff0c;邊看源代碼邊讀波形&#xff1a; 如下圖所示的寫操作的時序圖&#xff1a; 讀時序的理解同理。對于時序不理解的朋友請參考“I2C總線之(二)---時序” 完整的程序如下&#xff1a; #include<reg51.h>…

結對編程總結

這個項目我和我的結對伙伴共花了兩個月時間&#xff0c;之所以選這個項目&#xff0c;因為我們之前都學習過Python&#xff0c;也做過類似的程序&#xff0c;相比較其他項目而言&#xff0c;這個項目更合適&#xff0c;也讓我們對詞頻統計方面的知識加深了了解。寫這個程序我們…

JavaScript初學者必看“new”

2019獨角獸企業重金招聘Python工程師標準>>> 譯者按: 本文簡單的介紹了new, 更多的是介紹原型(prototype)&#xff0c;值得一讀。 原文: JavaScript For Beginners: the ‘new’ operator 譯者: Fundebug 為了保證可讀性&#xff0c;本文采用意譯而非直譯。 <di…

libGDX-wiki發布

為方便大家學習和訪問&#xff0c;我將libgdx的wiki爬取到doku-wiki下&#xff0c;專門建立了以下地址。歡迎大家來共同完善。 http://wiki.v5ent.com 轉載于:https://www.cnblogs.com/mignet/p/ligbdx_wiki.html

I2C讀寫時序

1. I2C寫時序圖&#xff1a; 注意&#xff1a;最后一個byte后&#xff0c;結束標志在第十個CLK上升沿之后&#xff1a; 2. I2C讀時序圖&#xff1a; 注意&#xff1a;restart信號格式&#xff1b;讀操作結束前最后一組clk的最后一個上升沿&#xff0c;主機應發送NACK&#xff0…

網站性能優化

基本概念 1、網站吞吐量&#xff1a;TPS/每秒的事務數&#xff0c;QPS/每秒的查詢數&#xff0c;HPS/每秒的HTTP請求數 2、服務器性能指標&#xff1a;系統負載&#xff0c;內存使用&#xff0c;CPU使用&#xff0c;磁盤使用以及網絡I/O等 前端優化方法 1、減少HTTP請求&#x…

JAVA-容器(2)-Collection

&#xff08;基于JDK1.8源碼分析&#xff09; 一&#xff0c;Collection 所有實現Collection接口的類原則上應該提供兩種構造函數&#xff1a; 【1】無參構造-創建一個空的容器 【2】有參構造-創建一個新的Collection&#xff0c;這個新的Collection和傳入的Collection具有相同…

軟件測試工具LoadRunner中如何定義SLA?--轉載

軟件測試工具LoadRunner中如何定義SLA&#xff1f; 瀏覽&#xff1a;2242|更新&#xff1a;2017-04-09 22:50SLA 是您為負載測試場景定義的具體目標。Analysis 將這些目標與軟件測試工具LoadRunner在運行過程中收集和存儲的性能相關數據進行比較&#xff0c;然后確定目標的 SLA…

最近閱讀20171106

java面試題 線上服務內存OOM問題定位三板斧 JVM的GC ROOTS存在于那些地方 mysql innodb怎樣做查詢優化 ----未閱讀 JAVA CAS原理深度分析----未閱讀 轉載于:https://www.cnblogs.com/Tpf386/p/7793248.html