Android 查找内存泄漏工具使用
来源:互联网 发布:查看活动网络正在识别 编辑:程序博客网 时间:2024/05/22 06:18
由于写代码的不规范或者使用不当等原因,经常APP会莫名的crash,比如oom,报这个错还是好一点的,有时还会报一些乱七八糟的错,比如:
鬼知道这个啥,这个时候应该怀疑程序中是否有内存泄漏问题了,神马是内存泄漏呢?说白了就是一个对象生命周期结束了本来应该被干掉,但是它的引用被其他的一个对象
持有,那个对象死活不让他被干掉,举个例子,一个activity本来调用finish()后就该被干掉,但是没被干掉,然后又启动了一个这个activity的对象,这时就会有2个activity对象,
再finish(),再启动,又多一个,当你启动了很多这个activity,就会有很多activity对象,最后内存就不够用了,可能就crash了,内存泄漏就像慢性毒药,随着时间的推移总有crash的隐患,oom就是快速的毒药,吃了立马就挂,下面来简单学习下怎么检测这个内存泄漏吧。
这里主要用2个工具基本就可以检测和发现引起泄漏的地方了:Android Studio 、LeakCanary
LeakCanary 中文使用说明
https://www.liaohuqiu.net/cn/posts/leak-canary-read-me/
LeakCanary GitHub地址
https://github.com/liaohuqiu/leakcanary-demo
首先打开Android Studio,数据线连接上手机运行项目,然后随便点击APP的页面,多打开几个activity或者具有怀疑的actiivty,然后打开如图:
这个页面可以监控APP的内存cup网络的使用情况,出现内存使用情况的图表后点击如图所示按钮:
点击这个按钮后会把APP的内存使用情况都分析出来,等一会,大概几秒吧,出现如图:
点击右边那个Analyzer Tasks按钮,出现如图:
点击右边那个绿色的按钮就是开启内存泄漏检查,点击后出现如下图:
红框里面所示就是内存泄漏的Activtiy,本来singleTask启动模式的这个activity出现了几个,肯定之前的没被释放了,那么怎么解决呢,点击右边的列表012那个,就会出现
哪些类占用activty这个对象不释放,不过看起来不是很好看,所以接下来使用开源LeakCanary 框架来解决这个问题。
首先在build.gradle文件件配置这个库的引用
dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.squareup.leakcanary:leakcanary-android:1.5'}然后再AndroidManifest.xml中,当然我只复制了部分代码
<service android:name="com.squareup.leakcanary.internal.HeapAnalyzerService" android:enabled="false" android:process=":leakcanary" /> <service android:name="com.squareup.leakcanary.DisplayLeakService" android:enabled="false" /> <activity android:name="com.squareup.leakcanary.internal.DisplayLeakActivity" android:enabled="false" android:taskAffinity="com.squareup.leakcanary"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>接着在自定义的Application中
@Override public void onCreate() { super.onCreate(); LeakCanary.install(this); }
这样就好了,然后重新运行项目,然后到APP里面乱点,如果有内存泄漏问题,就会弹出一个通知,如图:
点击那个通知,进入:
这里就很详细的分析出了哪个类的对象在作怪了,一级一级往上看,怎么解决那就直接review项目的代码了,可能还需要一定的灵感,
哈哈,现在又可以愉快的玩耍了
- Android 查找内存泄漏工具使用
- Android 内存泄漏工具使用
- Android 内存泄漏工具使用分析
- 使用Eclipse MAT查找内存泄漏工具介绍
- Android 内存泄漏查找方法
- 使用UMDH查找内存泄漏
- 使用UMDH查找内存泄漏
- 使用UMDH查找内存泄漏
- 使用UMDH查找内存泄漏
- 使用VLD查找内存泄漏
- Java剖析工具JProfiler查找内存泄漏
- Android内存泄漏检查工具
- 使用工具分析内存泄漏
- android内存泄漏检测StrictMode和MAT工具使用
- LeakCanary (Android 检测内存泄漏工具的使用)
- 使用MAT工具定位Android应用内存泄漏
- android优化(2)--内存泄漏之工具使用
- Java剖析工具JProfiler入门使用教程:查找内存泄漏的方法
- 检测应用位于后台,并弹出手势解锁,解锁成功进入主界面
- windows下Eclipse搭建MapReduce开发环境
- 听说你的项目中仅这些资源就卡成了翔?看看他们怎么做!
- Log4j2 + Maven的配置文件示例详解
- 创建微服务
- Android 查找内存泄漏工具使用
- ASP.NET事务处理
- 近况
- golang实战--实现短地址服务
- Linux ubuntu 基础操作(1)
- iOS开发之WebView怎么加载post请求并且传参数
- 解决“Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误
- 设置动画的执行次数
- 关于proc_common_pkg库文件找不到的解决办法