该项目是从LeakCanary移植到Eclipse的实现版,原始代码是从这里获得,并进行了一些修改。用了这个项目就可以很方便的找到内存泄漏问题啦,摆脱难用的MAT吧!
- 将leakcanary-lib导入eclipse;
- 你的项目引用leakcanary工程;
- 在AndroidManifest.xml中添加如下:
<!-- 写权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 相关的服务与Activity -->
<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" >
</activity>
<service
android:name="com.squareup.leakcanary.internal.HeapAnalyzerService"
android:enabled="false"
android:process=":leakcanary" />
<service
android:name="com.squareup.leakcanary.DisplayLeakService"
android:enabled="false" />
- 创建一个Application子类,并且将它设置为应用的Application
public class MyApplication extends Application {
private RefWatcher mRefWatcher;
@Override
public void onCreate() {
super.onCreate();
mRefWatcher = LeakCanaryWrapper.install(this, BuildConfig.DEBUG);
}
public RefWatcher getRefWatcher() {
return mRefWatcher;
}
}
然后在AndroidManifest.xml中设置application:
<application
android:name="com.leakcanary.demo.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
// 省略
</application/>
- 运行程序即可检测内存泄漏。
如果发生内存泄漏,那么则会在Log中输入相关错误信息:
上述信息很全面,第一行表示在com.leakcanary.demo
中发生内存泄漏,泄漏的对象是com.leakcanary.demo.OtherActivity
,持有它的是com.leakcanary.demo.ActivityManager.sInstance
对象。
其他使用均与LeakCanary相似,可查看LeakCanary的相关资料。