体验LeakCanary怎么做内存泄露检测

leakcanary下载地址: https://github.com/square/leakcanary,但这个工程是gradle的,一直使用不了。

花了很长时间,查了很多资料,发现http://www.myexception.cn/mobile/1920840.html 一文中的最管用。以下是该文章内容:

引子

  • 最近江湖流传一内存泄露检测的神奇-LeakCanary,于是笔者按耐不住激动的心情,想试一把。结果伤不起的,这个工程是gradle的,对于使用eclipse惯了的同学来说伤不起……不过笔者将其改造为eclipse工程了,github地址:https://github.com/cheyiliu/leakcanary/tree/leakcannary_eclipse_project

用法

  1. 下载该工程,导入eclipse并作为lib工程
  2. 在你的测试工程里引入该lib工程
  3. 将lib工程的manifest里的activity, service, permission信息拷贝到测试工程的manifest
  4.   <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/__LeakCanary.Base" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />


            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
  5. 按照官方介绍进行测试 https://github.com/square/leakcanary#how-do-i-use-it,笔者采用了其中的一个例子进行验证,代码如下:
public class MyApp extends Application {

    public static RefWatcher getRefWatcher(Context context) {
        MyApp application = (MyApp) context
                .getApplicationContext();
        return application.refWatcher;
    }

    private RefWatcher refWatcher;

    @Override
    public void onCreate() {
        super.onCreate();
        refWatcher = LeakCanary.install(this);
    }

}


public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Box box = new Box();//来自官方的例子
        Cat schrodingerCat = new Cat();
        box.hiddenCat = schrodingerCat;
        Docker.container = box;
        MyApp.getRefWatcher(this).watch(schrodingerCat);
    }

}

class Cat {
}

class Box {
    Cat hiddenCat;
}

class Docker {
    static Box container;
}

# 结果 

体验LeakCanary怎么做内存泄露检测_第1张图片


你可能感兴趣的:(android)