Android 在 Eclipse 项目中使用 Leakcanary 内存泄露检测

一、前言

LeakcanarySquare 公司推出的一款开源项目,如果说没听说过 Leakcanary 的话,那 Square 的其他产品应该有听说过吧,曾推出过 okhttpretrofitpicasso 等开源项目。Leakcanary 呢,是用于检测项目的内存泄露的,使用起来也很简单,但是这个项目是用于 Android Studio 的,至于 在 Android Studio 里怎么使用这里就不说了,打开上面的 Leakcanary 那个 Github 链接里面有说,由于一些人习惯用 Eclipse,或者一些之前在 Eclipse 中开发的老项目还没转成 Android Studio 的那怎么用这个 Leakcanary来检测内存泄露呢?这里我把 Leakcanary 转成了在 Eclipse 中可以使用的项目。

二、在 Eclipse 中运行效果

运行效果图

这个例子是点击了 Button 后创建了个匿名 AsyncTask,在 AsyncTask 中 sleep 了 20 秒,由于匿名内部类持有 Activity 的引用,在退出程序后 Activity 被销毁了,但 AsyncTask 还是在运行的,有引用还被持有着,就被 Leakcanary 检测到了。

三、适用于 Eclipse 的 Leakcanary 项目地址

Leakcanary-eclipse 传送门

目前是根据 Leakcanary 1.5.1 的版本进行转化的

四、使用

(一)引用

下载上面二中用于 Eclipse 的 Leakcanary 项目,导入 Leakcanary-watcher、Leakcanary-analyzer、Leakcanary-android, 在当前项目的引用 Leakcanary-android 这个 library。
截图

(二)在 AndroidManifest 中配置

打开当前的 AndroidManifest 添加下面的代码。

    <!-- Leakcanary config start -->
    <service
        android: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/leak_canary_LeakCanary.Base" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.squareup.leakcanary.internal.RequestStoragePermissionActivity"
        android:enabled="false"
        android:icon="@drawable/leak_canary_icon"
        android:label="@string/leak_canary_storage_permission_activity_label"
        android:taskAffinity="com.squareup.leakcanary"
        android:theme="@style/leak_canary_Theme.Transparent" />
    <!-- Leakcanary config end -->
> 还有权限

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
(三)在 Application 中初始化

新建一个 Application 类,继承自 Application 的,如果你项目已经有那就不需要新建了。
覆盖 onCreate() 方法,在 onCreate() 方法里调用 LeakCanary 的 install() 方法就可以了。

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        if (LeakCanary.isInAnalyzerProcess(this)) {
            // This process is dedicated to LeakCanary for heap analysis.
            // You should not init your app in this process.
            return;
        }
        LeakCanary.install(this);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值