简单集成leakcanary,记录下来,方便后期项目中直接使用
地址
导入依赖
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5'
添加权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Application中初始化
//LeakCanary.install(this);
//因调试设备非正常手机(出现泄漏屏幕中间会出现小鸟),所以无法使用notification或者leaks入口查看泄漏日志,所以采用保存本地的方法
LeakCanary.refWatcher(this).listenerServiceClass(LeakService.class)
.excludedRefs(AndroidExcludedRefs.createAppDefaults().build())
.buildAndInstall();
监听服务LeakService
public class LeakService extends DisplayLeakService {
@Override
protected void afterDefaultHandling(HeapDump heapDump, AnalysisResult result, String leakInfo) {
Log.d("LeakUploadService", "内存泄漏信息:leakInfo->" + leakInfo);
String filePath = Environment.getExternalStorageDirectory() + "/leak.txt";
File file = new File(filePath);
FileWriter fileWriter = null;
try {
if(!file.exists()){
file.createNewFile();
}
fileWriter = new FileWriter(file,true);
fileWriter.write(leakInfo);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileWriter != null) {
try {
fileWriter.close();
} catch (IOException e2) {
}
}
}
}
}
清单文件中注册监听服务
<application
android:name=".App"
...>
...
<service android:name=".LeakService" />
</application>
参考:LeakCanary还能这样????(自定义保存泄漏信息)
仅此记录,如有问题还请提出