android内存泄露工具
Ⅰ android手机测试中如何查看内存泄露
如何查看内存泄露
主要有2种方法
借助工具,查看。
借助adb 命令来查看。
【主要原理】
借助工具来查看泄露的原因。
详细实现方式
【工具查看】
常用工具有很多例如:
1.功能强大PC端检测工具,如MemoryAnalyzer运行在PC端抓取Android手机中的mp文件进行深度分析。
2.小而优的Android端检测工具,如LeakCanary随App一起安装会在Android手机桌面安装的内存泄露检测App
详细的介绍网络里面非常多这边不做过多的介绍。
3.还有一种,要求不高的可以通过android studio查看内存变化等
详细看到界面,视图等占用的内存情况。
【最后】
2种方法相互使用,验证内存泄露原因。
Ⅱ 如何在Android Studio中使用LeakCanary检测内存泄露
内存泄露检测是项目性能优化不可避免的问题,只有解决内存泄露问题才能从根本上解决OOM。在Eclipse中提供Mat工具来检测内存泄露,但是使用较为麻烦,界面也不是很直观。对于有耐心,有想法的,也是可以尝试了解一下。知道Leak的出现,为内存泄露检测带来了福音。
1.什么是LeakCanary
LeakCanary
A memory leak detection library for Android and Java.
LeakCanary是一个Android和Java的内存检测库。
2.LeakCanary如何展示内存泄露信息
如果项目存在内存泄露,就会在状态栏或是一个单独的Leaks程序中显示内存泄露信息,提供一个造成内存泄露对象的引用路径
【错误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'
}
如果存在内存泄露,将会显示内存泄露的对象的引用路径。
Ⅲ 使用android MAT查看内存泄露问题,我查看了很多资料,为什么在DDMS中没有.hprof文件
如何用MAT来分析,前提是Android开发和测试的工具安装完整,SDK,Eclipse:
1.打开Eclipse
2.选择 Help->Install New Software;
3.在Work with中添加站点:http://download.eclipse.org/mat/1.0/update-site/(这个地址可能会变化,但是新的地址可以在官方网站上找到:http://www.eclipse.org/mat/downloads.php )
4.生成.hprof文件:插入SD卡(Android机器很多程序都需要插入SD卡),并将设备连接到PC,在Eclipse中的DDMS中选择要测试的进程,然后点击Update Heap 和Dump HPROF file两个Button。
.hprof 文件会自动保存在SD卡上,把 .hprof 文件拷贝到PC上的\ android-sdk-windows\tools目录下。这个由DDMS生成的文件不能直接在MAT打开,需要转换。
运行cmd打开命令行,cd到\ android-sdk-windows\tools所在目录,并输入命令hprof-conv xxxxx.hprof yyyyy.hprof,其中xxxxx.hprof为原始文件,yyyyy.hprof为转换过后的文件。转换过后的文件自动放在android-sdk-windows\tools 目录下。
OK,到此为止,.hprof文件处理完毕,可以用来分析内存泄露情况了。
5.打开MAT:
在Eclipse中点击Windows->Open Perspective->Other->Memory Analysis
6.导入.hprof文件
在MAT中点击 File->Open File,浏览到刚刚转换而得到的.hprof文件,并Cancel掉自动生成报告,点击Dominator Tree,并按Package分组,选择自己所定义的Package 类点右键,在弹出菜单中选择List objects->With incoming references。
这时会列出所有可疑类,右键点击某一项,并选择Path to GC Roots->exclude weak/soft references,会进一步筛选出跟程序相关的所有有内存泄露的类。据此,可以追踪到代码中的某一个产生泄露的类。
Ⅳ 如何快速定位android app是否存在内存泄露
确定是否存在内存泄露及具体是哪个程序造成,首先需要关注的是内存泄露已弹出out of memory对话框的情况。这种情况下,直接通过对话框即可得知是哪个应用的问题,然后再进一步分析该应用是否因内存泄露而导致了out of memory对话框的弹出。可以通过阅读相关文档如《如何诊断Android应用中的内存泄露》中介绍的各种方法进行分析,确定是否有内存泄露以及具体是哪个进程造成的内存泄露。
生成hprof文件并使用MAT进行分析是另一种有效的手段。生成hprof文件可以通过在DDMS中选中进程并点击窗口左上角的mp hprof file按钮直接生成,或者通过在程序中添加特定代码来生成。推荐使用代码生成hprof,然后使用《Android内存泄露利器(hprof篇)》中的工具自动提取多个hprof文件,然后使用MAT进行比较分析。在MAT中导入.hprof文件后,MAT会自动解析并生成报告,通过点击Dominator Tree,并按照Package进行分组,选择自己定义的Package类,比较各个类在不同时期的RetainedHeap,找出可疑类。然后选择该类,右键点击,选择show retained Set项,查看Retained Heap的详细信息,进一步找出嫌疑项。
在代码中查找内存泄露的具体原因,根据在MAT找到的内存泄露信息,可以参照《Android内存泄漏简介》进一步在代码中查找内存泄露的原因并进行修复。如果代码相对简单,也可以直接根据《Android内存泄漏简介》中的内容,在代码中查找内存泄露的原因并解决。
Ⅳ Android开发中,有哪些好方法可以检测内存泄露和性能
下面是回答的内容
内存泄露,是Android开发者最头疼的事。可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴。怎么才能检测内存泄露呢?网上教程非常多,不过很多都是使用Eclipse检测的, 其实1.3版本以后的Android Studio 检测内存非常方便, 如果结合上MAT工具,LeakCanary插件,一切就变得so easy了。
熟悉Android Studio界面工欲善其事,必先利其器。
我们接下来先来熟悉下Android Studio的界面
结果
非独占时间:某函数占用的CPU时间,包含内部调用其它函数的CPU时间。
独占时间:某函数占用CPU时间,但不含内部调用其它函数所占用的CPU时间。
我们如何判断可能有问题的方法?
通过方法的调用次数和独占时间来查看,通常判断方法是:
如果方法调用次数不多,但每次调用却需要花费很长的时间的函数,可能会有问题。
如果自身占用时间不长,但调用却非常频繁的函数也可能会有问题。
综述
上面给大家介绍了若干使用Android Studio检查程序性能的工具,工具永远是辅助,不要因为工具耽误太长时间。如果有问题,欢迎大家纠正。