一使用步驟
- 添加依賴
// 內存泄漏檢測
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
- 在application中註冊.後面有代碼
- 運行項目後會出現圖標以下,若是有泄漏會以列表的形式進行展示;
![](http://static.javashuo.com/static/loading.gif)
二注意事項
- 因爲咱們這個項目是有多個moudle,一開始是LeakCanary是配置在commonlib項目下的,項目的application也是在commonlib下applicationLib裏寫入的,這樣發現不行,後來將項目環境切成每一個moudle單獨運行,這時我全部配置項都在marketbundle這個裏面配置了,這時發現是能夠進行內存檢測了;
# 是不是module環境file://
IS_MODULE=false
![](http://static.javashuo.com/static/loading.gif)
- 總結教訓:一開始因爲配置所有是在commomlib下面的,我app下面的application去繼承commomlib的applicationlib,applicationlib寫了Leakcanary的註冊這時發現是不行的,安裝app後並無黃色的Leaks圖標出現,而我本身試驗本身的appDemo是徹底能夠的,這個時候其實我就應該意識到這個內存泄漏註冊應該是在主app的moudle裏面進行,而我走了不少的彎路,最後一步一步排除過來才完成了配置,總而言之注意2點
- 在gradle裏面配置的依賴和application必須是在同一個moudle下,並必定是主moudle;(多個modle狀況下,一個的話就不存在這種狀況)
- 必須在當前application裏面實現註冊代碼
public class HostApplication extends ApplicationLib {
//
private String TAG = HostApplication.class.getSimpleName();
public RefWatcher refWatcher;
@Override
public void onCreate() { //必須在這個方法裏面進行建立和註冊,不要在lib裏面寫一個abstract方法這裏面繼承,不能這樣
Log.i(TAG, "onCreate");
super.onCreate();
refWatcher = setupLeakCanary();
}
private RefWatcher setupLeakCanary() {
JLog.i(TAG, "LeakCanary setupLeakCanary");
//若是當前的進程是用來給LeakCanary 進行堆分析的則return,不然會執行LeakCanary的install方法。這樣咱們就可使用LeakCanary了,若是檢測到某個Activity 有內存泄露,LeakCanary 就會給出提示。
if (LeakCanary.isInAnalyzerProcess(this)) {
JLog.i(TAG, "LeakCanary isInAnalyzerProcess");
return RefWatcher.DISABLED;
}
return LeakCanary.install(this);
}
public static RefWatcher getRefWatcher(Context context) {
HostApplication leakApplication = (HostApplication) context.getApplicationContext();
return leakApplication.refWatcher;
}
}