searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Android内存泄漏检测分析

2023-06-07 08:02:42
41
0

1.1.   内存泄露检测

1.1.1.     AndroidStudio

(1)查看内存使用情况

(2)页面关掉后,可以手动GC,如果内存没变的话代表这个时候有明显泄露

(3)导出hrof文件,先点 这个图标

再点击MemoryUsage

(4)

(5)可以导出标准hrof文件,并用MAT分析查看

1.1.2. 简单快捷的方式LeakCanary

注意:使用leakCanary的时候,在5.0以下的版本会出现Caused by: java.lang.NoClassDefFoundError,所以,测试完内存泄露后,记得删掉代码

(1)在app的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'

(2)在主Application里面添加如下代码:

LeakCanary.install(this);

(3)如上步骤添加完后运行app即可检测内存泄露情况,LeakCanary会自动通知系统哪个页面出现泄露

1.2.   内存泄露一般原因

1、内部类的使用(handler的使用一般也是如此)

解决方式:用内部静态类,对当前对象进行弱引用

2、context的引用

解决方式:尽量使用周期长的系统ApplicationContext

3、线程未关闭

4、系统本身的bug,如

 5.1系统会出现TextLine.sCache的泄露

 6.0版本会出现InputMethodManager的泄露

 

0条评论
0 / 1000
i****g
5文章数
0粉丝数
i****g
5 文章 | 0 粉丝
i****g
5文章数
0粉丝数
i****g
5 文章 | 0 粉丝
原创

Android内存泄漏检测分析

2023-06-07 08:02:42
41
0

1.1.   内存泄露检测

1.1.1.     AndroidStudio

(1)查看内存使用情况

(2)页面关掉后,可以手动GC,如果内存没变的话代表这个时候有明显泄露

(3)导出hrof文件,先点 这个图标

再点击MemoryUsage

(4)

(5)可以导出标准hrof文件,并用MAT分析查看

1.1.2. 简单快捷的方式LeakCanary

注意:使用leakCanary的时候,在5.0以下的版本会出现Caused by: java.lang.NoClassDefFoundError,所以,测试完内存泄露后,记得删掉代码

(1)在app的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'

(2)在主Application里面添加如下代码:

LeakCanary.install(this);

(3)如上步骤添加完后运行app即可检测内存泄露情况,LeakCanary会自动通知系统哪个页面出现泄露

1.2.   内存泄露一般原因

1、内部类的使用(handler的使用一般也是如此)

解决方式:用内部静态类,对当前对象进行弱引用

2、context的引用

解决方式:尽量使用周期长的系统ApplicationContext

3、线程未关闭

4、系统本身的bug,如

 5.1系统会出现TextLine.sCache的泄露

 6.0版本会出现InputMethodManager的泄露

 

文章来自个人专栏
it杂谈
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0