内存泄露,是Android开发者最头疼的事。可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴。
熟悉Android Studio界面工欲善其事,必先利其器。我们接下来先来熟悉下Android Studio的界面 一般分析内存泄露, 首先运行程序,打开日志控制台,有一个标签Memory ,我们可以在这个界面分析当前程序使用的内存情况, 一目了然, 我们再也不需要苦苦的在logcat中寻找内存的日志了。 图中蓝色区域,就是程序使用的内存, 灰色区域就是空闲内存,
我们怎么检测内存泄露呢首先需要明白一个概念, 内存泄露就是指,本应该回收的内存,还驻留在内存中。
dump成功后会自动打开 hprof文件,文件以Snapshot+时间来命名 通过Android Studio自带的界面,查看内存泄露还不是很智能,我们可以借助第三方工具,常见的工具就是MAT了,下载地址 http:///mat/downloads.php ,这里我们需要下载独立版的MAT. 下图是MAT一开始打开的界面, 这里需要提醒大家的是,MAT并不会准确地告诉我们哪里发生了内存泄漏,而是会提供一大堆的数据和线索,我们需要自己去分析这些数据来去判断到底是不是真的发生了内存泄漏。 接下来我们需要用MAT打开内存分析的文件, 上文给大家介绍了使用Android Studio生成了 hprof文件, 这个文件在呢, 在Android Studio中的Captrues这个目录中,可以找到 注意,这个文件不能直接交给MAT, MAT是不识别的, 我们需要右键点击这个文件,转换成MAT识别的。 然后用MAT打开导出的hprof(File->Open heap dump) MAT会帮我们分析内存泄露的原因 LeakCanary上面介绍了MAT检测内存泄露, 再给大家介绍LeakCanary。
LeakCanary会检测应用的内存回收情况,如果发现有垃圾对象没有被回收,就会去分析当前的内存快照,也就是上边MAT用到的.hprof文件,找到对象的引用链,并显示在页面上。这款插件的好处就是,可以在手机端直接查看内存泄露的地方,可以辅助我们检测内存泄露 使用:
在应用的Application onCreate方法中添加LeakCanary.install(this),如下
应用运行起来后,LeakCanary会自动去分析当前的内存状态,如果检测到泄漏会发送到通知栏,点击通知栏就可以跳转到具体的泄漏分析页面。
追踪内存分配如果我们想了解内存分配更详细的情况,可以使用Allocation Traker来查看内存到底被什么占用了。
点一下是追踪, 再点一下是停止追踪, 停止追踪后 .alloc文件会自动打开,打开后界面如下: 当你想查看某个方法的源码时,右键选择的方法,点击Jump to source就可以了 查询方法执行的时间Android Studio 功能越来越强大了, 我们可以借助AS观测各种性能,如下图: 如果我们要观测方法执行的时间,就需要来到CPU界面 点击Start Method Tracking, 一段时间后再点击一次, trace文件被自动打开, 非独占时间: 某函数占用的CPU时间,包含内部调用其它函数的CPU时间。
我们如何判断可能有问题的方法?通过方法的调用次数和独占时间来查看,通常判断方法是:
综述上面给大家介绍了若干使用Android Studio检查程序性能的工具,工具永远是辅助,不要因为工具耽误太长时间。如果有问题,欢迎大家纠正。 |
|