app 性能
Android App优化之性能分析工具 https://www.jianshu.com/p/da2a4bfcba68
--------------
系列文:
今天聊下个人比较惯用的一些App性能测试和分析工具, 先上个图:
![性能分析工具]

本文暂不对工具的使用做过多的深入.
在后续的具体实例中会具体说明怎么用这些工具来达成分析目的和解决问题的.
1, 官方工具
一般来说, 学习一门新的技术, 最应该做的就是阅读其官方文档, 那是最权威的.
Android本身给我们提供了很多App性能测试和分析工具, 而且大部分都集成到Android Studio或DDMS中, 非常方便使用.
1.1 StrictMode
说明
顾名思义, "严格模式", 主要用来限制应用做一些不符合性能规范的事情. 一般用来检测主线程中的耗 时操作和阻塞. 开启StrictMode后, 如果线程中做一些诸如读写文件, 网络访问等操作, 将会在Log console输出一些警告, 警告信息包含Stack Trace来显示哪个地方出了问题.文档
作用
- 主要用来做主线程优化分析
1.2 Systrace
- 说明
Systrace是一个收集和检测时间信息的工具, 它能显示CPU和时间被消耗在哪儿了, 每个进程和线程都在其CPU时间片内做了什么事儿. 而且会指示哪个地方出了问题, 以及给出Fix建议.
其以trace文件(html)的方式记录. 可以直接用Chrome浏览器打开查看. 界面如下:

文档
作用
- 作用很多, 个人主要用来分析UI的绘制时间, 结合Hierarchy Viewer来提升UI性能.
- 也可以用来发现耗时操作.
1.3 Hierarchy Viewer
- 说明
Hierarchy Viewer提供了一个可视化的界面来观测布局的层级, 让我们可以优化布局层级, 删除多余的不必要的View层级, 提升布局速度.

有必要说明下的是:
上图红框标出的三个点是关键分析数据. 左起依次代表View的Measure, Layout和Draw的性能. 另外颜色表示该View的该项时间指数, 分为:
* 绿色, 表示该View的此项性能比该View Tree中超过50%的View都要快.
* 黄色, 表示该View的此项性能比该View Tree中超过50%的View都要慢.
* 红色, 表示该View的此项性能是View Tree中最慢的.
文档
作用
- 用来做View层级分析, 可以分析出View Tree中的性能阻塞点, 以便对症下药, 提升布局性能.
Hierarchy Viewer需要Root的机器(产品机没有开启ViewServer)才可以执行.
可以使用第三方的开源的ViewServer来协助我们在未Root的机器上使用Hierarchy Viewer分析.
1.4 TraceView
- 说明
一个图形化的工具, 用来展示和分析方法的执行时间.

文档
作用
- 分析方法调用栈以及其执行时间, 优化方法执行.
1.5 Memory Monitor
- 说明
内存使用检测器, 可以实时检测当前Application的内存使用和释放等信息, 并以图形化界面展示.

文档
作用
- 用来做内存分析, 内存泄露排查的不二之选. 可以结合heap viewer, allocation tracker来分析.
- 可以导出hprof文件结合第三方的MAT工具分析泄露点.
1.6 Other Monitor
说明
Android Studio的Monitor还提供了其他三个Motinor --- CPU, GPU, Network.文档
作用
- 分别用来跟踪监测CPU,GPU和Network的使用极其变化, 可以作为网络优化, 流量优化和渲染优化等的一个指导. (个人并不常用到~)
1.7 其他
Android的开发者模式中也提供了较多的用来监测性能的选项, 可以用下:

2, 第三方工具
以下工具全部开源, 开源万岁...
2.1 Google的Battery Historian
说明
Google出品, 通过Android系统的bugreport文件来做电量使用分析的工具.文档
作用
- 用来做电量使用分析.
2.2 网易的
说明
针对Android App的CPU, 内存, 网络, 电量等多项综合的测试分析.文档
作用
- 比官方工具更适合国人使用来做App的整体性能分析.
2.3 Square
说明
Square出品, 必属精品.
类似与App探针的内存泄露监测工具.文档
作用
- 集成到App中, 用来做内存问题预防最好不过了.
2.4 AndroidDevMetrics
说明
一个library, 用来检测Activity生命周期执行性能, Dagger2注入性能以及帧率性能的工具.文档
作用
- 如果你的应用使用的Dagger2, 这个就比较必要了.
3, 结语
MAT没有侧重的提, 是因为这个工具在ADT时代比较常用, AS2.0之后, 本身的Memory Monitor越来越强大, 结合日益完善的第三方工具基本上可以完成内存方面的优化了.
欢迎大家分享自己常用的App性能分析工具, 共同学习~
作者:anly_jun
链接:https://www.jianshu.com/p/da2a4bfcba68
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
app 性能的更多相关文章
- fir.im Weekly - 如何进行 Android App 性能优化
关于 Android App 的优化,@anly-jun 用 3 个月完成了这一系列文章,从 性能分析工具 到 ANR .Layout .消除卡顿 到 内存优化.内存分析工具大概十五六篇,并对此做一个 ...
- Android APP性能分析方法及工具
近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...
- 25条提高iOS App性能的建议和技巧
这篇文章来自iOS Tutorial Team 成员 Marcelo Fabri, 他是 Movile 的一个iOS开发者. Check out his personal website or fol ...
- 十大技巧优化Android App性能
无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的. 那么,如何能开发出更高性能的Android App?相信是软 ...
- android app性能优化大汇总(google官方Android性能优化典范 - 第1季)
大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能.从设计师的角度,他们希望App能够有更多的动画,图片等时尚元素来实现流畅的用户体验.但是Android系统很有可能无法及时完成那些复杂的界 ...
- App性能提升方法
总体思路:精简请求数 1.css sprit 图像拼合,将所有可拼接的所有图像拼接为一整张图像,然后再利用css中的position定位来处理,降低图片的请求数 2.懒加载:只渲染客户端用户可见区域[ ...
- iOS App 性能优化总结
今天简单总结一些clientapp 优化的方案和方向. 我相信开发一个app大部分团队都能够完毕,可是性能久不一样啦,和我们都写一个冒泡算法一样,我相信每一个人写的冒泡算法都不一样,这些区别就带来了性 ...
- 优化Android App性能?十大技巧必知!
无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件 ...
- 极光开发者沙龙 之 移动应用性能优化实践 【一】旧酒新瓶——换个角度提升 App 性能与质量
旧酒新瓶--换个角度提升 App 性能与质量 主讲人:高亮亮 --- 饿了么移动技术部高级iOS工程师,负责饿了么商家版iOS APP开发,对架构和系统底层有深入研究,擅长移动性能分析,troub ...
- Android APP 性能优化的一些思考
说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...
随机推荐
- html中script标签的使用方法
向HTML页面中插入JavaScript的主要方法,就是使用<script>元素.这个元素由Netscape创造并在Netscape Navigator2中首先实现.后来,这个元素被加入到 ...
- 微信浏览器里在底部的输入框,ios11的不会被遮盖、10.1会被盖住
/** * 由于ios10 和 ios11 版本之间的差异,所以先判断ios系统版本之后再做处理 */ let str = navigator.userAgent.toLowerCase(); let ...
- Linux---一级/二级目录以及位置目录名/指令
home目录:普通用户登录进来以后的初始位置(会在home目录下创建一个登录名相同的目录例如 / home / 用户名),如果是超级用户则就是 在根目录 /下的 root目录(也就是 /root) ...
- spring学习(二)---依赖注入
spring第二个特性是依赖注入. 学习依赖注入,首先应该明白两个问题:1,谁依赖谁:2,谁注入,注入什么? 首先还是看代码: 还是这个bean: package testSpring.busines ...
- JPA的初级CRUD-01
一.JPA 1.1 什么是JPA JPA:(Java Persistence API) ORM的规范 JPA是规范,Hibernate是它的实现(不唯一,但最好) 最底层的操作还是JDBC(引入驱动包 ...
- 在idea中,mavne项目使用mybatis-generator-maven-plugin自动生成实体了的时候,在maven插件里面始终不显示
最近想学习mybatis的知识,自己搭了个简单的ssm框架,想通过插件自动生成实体类,发现想要的插件一直都没显示出来,着实很郁闷: pom.xm中的配置: <!--mybatis-generat ...
- windows 10 安装可视化mycat
前提: 1.安装配置好JDK环境 2.安装配置好mysql 3.安装配置好Navicat 一.下载mycat git:https://github.com/MyCATApache/Mycat-down ...
- npm: 权限阻止修复
在使用 npm install 时,总提示: Error: EACCES: permission denied 今天通过这个命令设置了权限解决了问题: sudo chown -R $(whoami) ...
- STM32的SWD调试进不了main函数
玩了那么久STM32,还没有用SWD调试过程序(一直都是用printf调试程序),觉得有些落后了,于是开始搞起了SWD调试. 很快通过查阅资料,知道了keil里面的配置和ST-Link与STM32的连 ...
- Charles配置抓取HTTPS请求的Android配置
关于android手机在mac版charles上抓不到包这个问题困扰了很久,查阅了很多资料,发现是android7.0系统安全策略问题. Charles抓包正常流程1.在手机上配置证书 点击后:直接在 ...