关于LeakCanary 的实现原理,以及诸多好处此处不做赘述。下面仅讲述自己是如何搭建Django+Python+LeakCanary内存泄漏统计平台的。
1.在AndroidStudio中配置LeakCanary
(1)在build.gradle文件中引入对LeakCanary的依赖,其中设置为正式环境不使用LeakCanary
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'
(2)在项目的Application中引用LeakCanary
LeakCanary.install(this)
2.重写内存泄漏处理类
创建一个LeakUploadService 继承DisplayLeakService,并重写发生内存泄漏后的处理方法:
3.重载LeakCanary类中的install方法
由于LeakCanary类中的install方法传递的为DisplayLeakService类,所以为了保证使用自己的处理类,则需要重载LeakCanary的install方法。并修改在Application中对LeakCanary的引用。此处在项目中重新定义了一个名为LeakCanaryWithoutDisplay 的类来实现该操作。
4.LeakUploadService 中上传内存泄漏数据所应用的接口,需要自己编写。此处不提供源代码。
5.在Python 中引入 JIRA 库
(1)通过 pip 安装JIRA,pip install jira
(2)在python 2.7中通过 from jira import JIRA 时报错
解决方法:修改/Library/Python/2.7/site-packages/packaging/requirements.py 中的MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker”) 为 MARKER_EXPR = originalTextFor(MARKER_EXPR)("marker”)
(3)一个测试demo
6.实现最终效果如下