Square公司开发可以直接在手机端查看内存泄露的工具
实现原理:本质上还是用命令控制生成hprof文件分析检查内存泄露,然后发送通知。
接入步骤:
1.添加依赖:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1' testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
2.application的onCreate()中:
if (LeakCanary.isInAnalyzerProcess(this)) { return; } LeakCanary.install(this); }在API14以上可直接检测泄漏。
以下为测试用例:
public class TestActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); } @Override protected void onStart() { super.onStart(); new Thread() { @Override public void run() { while (true) { try { Thread.sleep(1000); Log.e(getPackageName(), "LeakCanary ----->>>>> " + System.currentTimeMillis()); } catch (Exception e) { } } } }.start(); } }
运行之后,测试机会同步安装Leaks。
如图:
运行中,出现:
![](https://img-blog.csdn.net/20170726155810239?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTW9MaUxpYW5fMTIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
代表捕获了泄漏位置。
找到通知栏:
点击进入后,会看到:
![](https://img-blog.csdn.net/20170726160112024?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTW9MaUxpYW5fMTIz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
另附:
LeakCanary检测内存泄漏及解决办法