作者:HW-LKZ
Android开发中, 所用到的基本组件大都有生命周期,生命周期过后,组件所占用的内存就会被系统回收,但有些情况下因为代码书写的问题,例如组件的引用被静态变量所持有,内存不会被释放,由此可能会引发一些问题如程序卡顿,系统强制回收内存引起的空指针等问题.
LeakCanary是Square的一个开源项目,它是一个Android和Java的内存泄露检测器,在检测到内存泄漏后可以给出很好的界面提示,例如具体到哪个静态变量无法释放.在Android studio和Eclipse中都可集成.
集成方式:
Android studio
1:build.gradle中添加引用:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
网上大部分人说的是用1.3版本,但是1.3版本在Android 6.0 之后有问题,我测试发现无法正常使用,而1.5版本解决了6.0之后的适配问题.
2:Application中添加
LeakCanary.install(this);
Eclipse
1:导入 leadcanary-analyzer,leadcanary-android,leadcanary-watcher 三个工程,其中 leadcanary-analyzer依赖leadcanary-watcher,leadcanary-android依赖leadcanary-analyzer ,各工程参考附件
2:创建demo工程依赖leadcanary-android工程,并在AndroidManifest.xml中添加相关的activity和service
<!-- 相关的服务与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' >
</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' />
3:
Application中添加
LeakCanary.install(this);
4:手动创建一个demo测试一下吧
public class MainActivity extends Activity
{
static Demo sDemo;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SDKChannelConfig.getInstance(this);
if (sDemo == null)
{
sDemo = new Demo();
}
finish();
}
@Override
protected void onDestroy()
{
Log.i('MainActivity', 'onDestroy');
super.onDestroy();
}
class Demo
{
}
}
运行起来几秒钟之后出现Dumping momory的提示,并有每个内存泄漏的树状详情.





































苏公安网备 32011402010933号