问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在Android Studio中使用LeakCanary检测内存泄露

发布网友 发布时间:2022-04-20 21:30

我来回答

1个回答

热心网友 时间:2023-06-24 01:37

内存泄露检测是项目性能优化不可避免的问题,只有解决内存泄露问题才能从根本上解决OOM。在Eclipse中提供Mat工具来检测内存泄露,但是使用较为麻烦,界面也不是很直观。对于有耐心,有想法的,也是可以尝试了解一下。知道Leak的出现,为内存泄露检测带来了福音。

1.什么是LeakCanary

LeakCanary

A memory leak detection library for Android and Java. 

LeakCanary是一个Android和Java的内存检测库。

2.LeakCanary如何展示内存泄露信息

如果项目存在内存泄露,就会在状态栏或是一个单独的Leaks程序中显示内存泄露信息,提供一个造成内存泄露对象的引用路径

这个项目是在应用相应的回退之后分析是否存在内存泄漏,如果存在内存泄漏,将进行相应的分析并处理,若没有则不会,不能做到MAT或者studio中相应的实时查看内存状态的,并且检测具有很大的延时,最少10s。

3.LeakCanary的Github地址:

https://github.com/square/leakcanary

4.在Android Studio中使用LeakCanary

引入LeakCanary有多种方法,我们直接远程依赖
*   *Step 1:   配置bundle.gradle**

debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'//    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'

【错误1:】截图如下: Failed to resolve: com.squareup.leakcanary:leakcanary-android

这是因为我们是远程依赖leakcanary,而leakcanary项目放在jcenter() 和mavenCentral()架包库中
所以需要在在build中再加入如下代码,并 clean Build。

allprojects {
repositories {
jcenter()
}
}    

如果仍不成功,需要添加

allprojects {
repositories {
jcenter()
mavenCentral()
}
}   

Step2:在Application文件中配置

public class ExampleApplication extends Application {

@Override public void onCreate() {    super.onCreate();    if (LeakCanary.isInAnalyzerProcess(this)) {      // This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}
LeakCanary.install(this);    // Normal app init code...
}

step3、应用安装
安装应用,在debug版本的apk安装后,会出现如下两个图标:左边的是自己应用的图标,右边是启动应用后退出,自动安装的leakCancayDe图标。

【错误2】:但是有的人没有相应的图标,怎么办?

因为gradle设置错误的原因,上述build分别设置了debugCompile 和 releaseCompile,具体的区别这里不细说了,需要有一定的gradle功底,才能改修完成。这里给出的最简易的方案,适用于该产品在加入的leakCancy仅仅在测试的时候使用,而在release包中手动去除相应的代码:【解决当前问题,但是不提倡】
1、debug 和 release 引用相同的lib

dependencies {
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
}
2、使用compile 不再1区分debug 和 release12
dependencies {
compile 'com.squareup.leakcanary:leakcanary-android:1.5'

如果存在内存泄露,将会显示内存泄露的对象的引用路径。 

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何批量导出全部微信好友微信号?快速导出微信联系人 交强险什么价格 命运冠位指定必练五星英灵是什么 命运冠位指定必练五星英灵推荐 自制豆沙馅能保存多久 红豆沙馅怎么保存 我高三,从现在到高考分数从350提到500多,有可能吗?我是文科生 高三350分还有5个月能提多少分 文科复读350多分可以提高多少 钱钟书-谈艺录-读本目录 送茶叶都有什么讲究呢? 中国文化送礼茶叶有什么讲究茶叶送礼有什么讲究和注意事项 如何测试一个软件是否内存泄漏,怎么测试?具体点,... Android studio如何分析内存泄漏,是否有自带的分... android手机测试中如何查看内存泄露 如何测试软件的内存泄露呢,是有什么工具吗 怎么测试ios app的内存泄漏 y7000p有大灯吗 是不是男生唱歌音都要比女生低八度呢?如果低的话... 别人说我唱歌低8度,是什么意思?该如何解决? (高分)推荐男生简单容易唱的歌曲和练歌的方法 男生如何唱假音 男生唱歌低八度怎么办? 该吃吃,该喝喝,遇事别往心里搁; 下联: 男生唱歌低八度怎么改 该吃吃该喝喝遇事别往心里搁 下联 16岁男生唱低音和假声都ok 可如何将这两个连在一起... 家门口就搁一条路有一个牌坊,而且全是坟上的石头,... 帮忙推荐一些男生唱的调子比较低比较平的慢板情歌 谁有月星汐落翼天使四部的TXT呀 可不可以发给我 邮... 一般男的要唱女声的key要低几个调或者高几个调比较... r7000p性能模式 山核桃是如何采摘的,安全吗? 现在有没有山核桃采摘机 软件测试的具体流程是什么? 内存泄露和内存溢出后... 果农怎么摘取较高果树上的果子,爬树摘取还是用什... Android用MAT检测内存泄漏问题。。 核桃采收方法有哪些? Android 内存溢出和内存泄漏的区别 核桃树什么时候剪枝,怎么剪。训 描述软件内存泄露的原因及检查方式 怎样把核桃从树上打下来 .如何弄出一个内存泄漏的错误来? 山核桃采摘除了传统的用竹竿打,谁还有其他更好的... 如何在linux下检测内存泄漏 临安山核桃采摘简单吗?没有经验人可以采摘吗? gettotalprivatedirty是什么方法 核桃成熟后怎么采摘? ios 双击内存泄漏的代码 无代码跳出来怎么办 请问Objective-c 内存溢出问题经验汇总,那个好心... 何处有售摘果器和鱼叉? 采摘下来的文玩核桃该咋弄?