前言:在Android開發(fā)中我們總是遇到這種那種的內(nèi)存泄漏的問題苛茂,基于這種問題我們可以用Android內(nèi)存泄漏工具Leak Canary工具來檢測筹燕。
一:首先我們需要在主項(xiàng)目的build.gradle里面配置依賴:
代碼示例:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
二:在application里面初始化配置
代碼示例如下:
private static RefWatcher mRefWatcher;
@Override
public void onCreate() {
super.onCreate();
mRefWatcher = LeakCanary.install(this);
}
public static RefWatcher getRefWatcher() {
return mRefWatcher;
}
三:最后在AndroidManifest里面配置:
把我們剛才定義的application應(yīng)用在AndroidManifest里面:
代碼如下:
android:name=".ExampleApplation"
四:最后我們測試吧
新建兩個(gè)Activity一個(gè)MainActivity和一個(gè)LeakActivity,在MainActivity里面新建一個(gè)點(diǎn)擊事件跳轉(zhuǎn)到LeakActivity,在LeakActivity里面我們存入一個(gè)不能釋放的activity象浑。
MainActivity里面代碼如下:
findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, LeakActivity.class);
startActivity(intent);
}
});
也就是一個(gè)跳轉(zhuǎn)事件竿报。
LeakActivity里面代碼如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_leak);
ActivityMgr.getInstance().addActivity(this);
}
ActivityMgr是一個(gè)單利忆某,存儲一個(gè)activity并不釋放。
代碼示例如下:
private static ActivityMgr sInstance = new ActivityMgr();
List<Activity> mActivities = new ArrayList<>();
private ActivityMgr() {
}
public static ActivityMgr getInstance() {
return sInstance;
}
public void addActivity(Activity activity) {
mActivities.add(activity);
}
public void removeActivity(Activity activity) {
mActivities.remove(activity);
}
最后我們運(yùn)行程序奏路,點(diǎn)擊button跳轉(zhuǎn)到LeakActivity畴椰,然后再返回MainActivity.這是過個(gè)幾秒鐘就會出現(xiàn)頁面leak的通知,然后我們點(diǎn)擊通知就會跳到詳情的頁面:
頁面示例圖如下:
Screenshot_2018-01-26-16-12-49-134_com.example.administrator.leakcanarydemo.png
到此此控件的介紹結(jié)束了鸽粉。