LeakCanary——消除Android中的内存泄露
2019獨角獸企業重金招聘Python工程師標準>>>
##LeakCanary
####簡介 LeakCanary是Square公司最近公布的開源項目,旨在消除Android中的內存泄露(Memory Leak),項目地址猛戳這里。
####使用 LeakCanary的使用也非常之簡單,僅需要在Application中添加一行代碼
public class ExampleApplication extends Application {@Override public void onCreate() {super.onCreate();LeakCanary.install(this);} }當然依賴也是必須的
dependencies {debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'}在這里分別使用了debugCompile和releaseComile是為了在開發測試和發布時,發現內存泄露執行不同Action。
當使用debug編譯時,如果Activity發生了內存泄露,LeanCanary會自動發送Notification提醒你,點擊之后會展現內存泄露的詳細信息,列出相關的對象引用。 并且還會在logcat中打印相關的信息:
In com.example.leakcanary:1.0:1 com.example.leakcanary.MainActivity has leaked:
- GC ROOT thread java.lang.Thread.<Java Local> (named 'AsyncTask #1')
- references com.example.leakcanary.MainActivity$3.this$0 (anonymous class extends android.os.AsyncTask)
- leaks com.example.leakcanary.MainActivity instance
- Reference Key: e71f3bf5-d786-4145-8539-584afaecad1d
- Device: Genymotion generic Google Nexus 6 - 5.1.0 - API 22 - 1440x2560 vbox86p
- Android Version: 5.1 API: 22
- Durations: watch=5086ms, gc=110ms, heap dump=435ms, analysis=2086ms
如果你認為LeakCanary能做的只有這樣,那你就大錯特錯了。只要你想,它還可以監視任何對象。
RefWatcher refWatcher = LeakCanary.install(this);然后在你覺得對象要被虛擬機回收的時機讓RefWatcher觀察這個對象:
refWatcher.watch(obj)####結果 在使用LeakCanary之后,Square聲稱減少了94%OOM產生的crash,甚至還發現了Android SDK中的內存泄露。
####原理
其實LeakCanary的原理也很簡單,簡單來說就是創建了一個WeakReference對象,如果觸發了GC之后這個對象存在,則說明發生了內存泄露。接著dump內存,分析引用,發送通知。
#####參考地址
- https://github.com/square/leakcanary
- https://corner.squareup.com/2015/05/leak-canary.html
轉載于:https://my.oschina.net/u/724985/blog/413414
總結
以上是生活随笔為你收集整理的LeakCanary——消除Android中的内存泄露的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity的自带特性
- 下一篇: c# 自定义控件之小小进度条