背景介绍

Android用户也许会经常碰到以下的问题:

1)应用后台开着,手机很快没电了——应用耗电大;

2)首次/非首次启动应用,进入应用特别慢——应用启动慢;

3)应用使用过程中,越来越卡——CPU能力不足/内存泄露;

4)应用页面卡顿——帧率较低、页面卡顿。 因此,对开发的Android应用,必须对其进行性能测试,不然将会直接影响用户体验。

Android应用性能测试通常包括:启动时间、内存、CPU、耗电量、流量、流畅度等。本次先介绍启动时间的测试方法。

启动时间对于App的性能测试,启动时间是个重要指标,启动时间分为两种情况,一种是冷启动时间(通常是系统重启,即在启动前没有该App进程的情况),另一种是热启动,即App从被切换到前台(点back退出后再点击图标启动)。QA测试时,一般关注冷启动的启动时间。以下介绍三种测试启动时间的方法,供大家参考,可以有针对性的使用。

1.1 使用adb命令

1.1.1 测试方法 输入adbshell am start -W packagename/MainActivity命令,计算启动时间。如下图:

图1应用第一次启动也就是我们常说的冷启动,这时候你的应用程序的进程是没有创建的. 这也是大部分应用的使用场景.用户在桌面上点击你应用的 icon 之后,首先要创建进程,然后才启动 MainActivity.这时候adbshell am start -w packagename/MainActivity 返回的结果,就是标准的应用程序的启动时间。注意Android 5.0 之前的手机是没有WaitTime这个值的。关于ThisTime/TotalTime/WaitTime的区别,下面是其解释。WaitTime=endTime-startTime

  • startTime记录的刚准备调用startActivityAndWait()的时间点

  • endTime记录的是startActivityAndWait()函数调用返回的时间点

  • WaitTime = startActivityAndWait()调用耗时。

WaitTime 就是总的耗时,包括前一个应用Activity pause 的时间和新应用启动的时间;ThisTime 表示一连串启动Activity 的最后一个 Activity 的启动耗时;TotalTime表示新应用启动的耗时,包括新进程的启动和 Activity 的启动,但不包括前一个应用Activity pause 的耗时。也就是说,开发者一般只要关心 TotalTime 即可,这个时间才是自己应用真正启动的耗时。

总结一下,如果只关心某个应用自身启动耗时,参考TotalTime;如果关心系统启动应用耗时,参考WaitTime;如果关心应用有界面Activity启动耗时,参考ThisTime。

1.1.2 总结

该方法算出的时间是系统从开始处理启动activity的时间到完成运行layout和draw函数的时间,简单的理解就是启动这个Activity的时间,并不包括点击icon到系统接收到消息的时间。显然,这个时间并不能完整的模拟用户操作场景的启动时间。其次该方法只计算一个Activity的整体启动时间,没有分别统计其中每个函数的时间,不便于定位问题。针对这两个问题,我们接下来看一下下面两个方法是怎样解决的。

我们在测试中关注的其实是用户体验的启动时间,那么上面的时间就不能满足我们的需求了。既然是用户体验我们可以用更直观的方式,使用screenrecord进行屏幕录制然后分析视频。

1.2 使用screenrecord进行屏幕录制

1.2.1 测试方法 (1)输入命令adb shellscreenrecord --bugreport /sdcard/lanch.mp4--bugreport 参数会使视频输出一些时间信息和帧信息便于我们分析启动时间。 (2)点击收集图标,app完全启动后,使用ctrl+c结束视频录制。 (3)使用命令adb pullsdcard/lanch.mp4 ./,导出视频 (4)导出视频到电脑,使用可以按帧播放的视频软件打开(mac上quicktime就可以,win下可以用kmplayer),并按帧播放。 如下图所示:

图2按帧播放视频,视频左上角会显示每一帧的时间(精确到ms)和帧数。如图,11:09:38.031表示时分秒,f=333是帧数。在视频中会看到icon会变暗然后高亮,高亮时就是系统开始处理本次icon点击事件了。可以把这里作为点击时间,然后根据体验要求,看到app启动页完全绘制完作为终止时间,这个时间减去点击时间就是app的启动时间。

1.2.2 总结 该方法虽然可以模拟用户的操作场景,但是操作成本较高且无法准确清晰明了的知道哪些函数调用时间过长。 以上两种方法,单从启动时间看,是无法定位出具体哪个函数耗时多一些,遇到启动时间大于预定的启动时间阀值时,需一步步的打log,分析查明原因。下面的方法是贴吧目前计算启动时间的办法,可以很清晰的看到每个函数的调用时间。

1.3 代码埋点,查看输出日志

1.3.1 测试方法 在代码中打点,输出日志查看。拿贴吧举例,下图是整个启动要经历的操作。

图3具体每步做了哪些,可以参照下表。

图4这样通过打点输出日志来测试启动时间,QA就可以很方便的查看到具体每个模块的耗时时间了,如下图。

1.3.2 总结 这样打点,可以清晰明了的看出Activity的总耗时及各个函数的耗时情况,这样在测试过程中,如果遇到问题可以很容易的定位到具体的函数。在测试过程中也有针对点,比如贴吧直播后续会以插件的形式整合到贴吧里,测试时,可以多关注plugin初始化的时间。

针对启动时间这一性能指标,个人觉得打点输出日志的方式较为理想,QA在测试过程中发现有疑似问题后,可以给出具体的函数耗时时间。

如何测试app启动时间?相关推荐

  1. android进程自动启动时间,如何统计Android App启动时间

    随着App的逻辑不断庞大,一不注意就会将耗时的操作放置在应用启动过程之中,导致应用启动速度越来越慢,用户体验也越来越差.优化启动速度是几乎所有大型App应用开发者需要考虑的问题.优化启动速度之前首先需 ...

  2. python测试app性能_App性能测试工具MobilePerformance

    一. 环境搭建 安装Android SDK 1.6或者1.7版本均可,建议1.7,环境变量的配置,Java SDK的安装很简单,不赘述了. 安装SDK 1.安装Android SDK: 2.安装完毕后 ...

  3. Android踩坑经验--App启动时间正确统计姿势

    在这里讨论的是指冷启动,热启动不在讨论范围内.如何正确衡量App的启动时间,一般有以下几种方法:AMS日志分析法,录屏分帧法,代码埋点法,logicat分析法等,本文重点阐述最常用的AMS日志分析法, ...

  4. App 启动时间优化方法详解

    用户希望APP 能够快速响应并加载. 一个启动速度慢的APP 不符合用户期望,可能会令用户失望,并且可能会导致用户对您的应用程序评价不佳,甚至会卸载你的应用. 本文将讨论如何优化应用的启动时间,首先我 ...

  5. Android启动优化实战(有效降低APP启动时间)

    1.概述 手机点击一个APP,用户希望应用能够及时响应并快速加载.启动时间过长的应用不能满足这个期望,并且可能会令用户失望.这种糟糕的体验可能会导致用户在 Play 商店针对您的应用给出很低的评分,甚 ...

  6. struts启动时加载_iOS优化篇之App启动时间优化

    原文:橘子不酸丶http://www.zyiner.com/article/5 前言 最近由于体验感觉我们的app启动时间过长,因此做了APP的启动优化.本次优化主要从三个方面来做了启动时间的优化,m ...

  7. iPhone手机获取uuid 安装测试app

    iPhone手机获取uuid 安装测试app UDID是一种iOS设备的特殊识别码.除序号之外,每台ios装置都另有一组独一无二的号码,我们就称之为识别码( Unique Device Identif ...

  8. adb-获取包名/界面名、获取app启动时间、卸载app、退出app、查看所有进程

    获取包名/界面名 Mac/Linux: adb shell dumpsys window windows | grep mFocusedApp adb shell dumpsys window win ...

  9. 测试人多少岁的软件,抖音你的三观多少岁免费测试app

    抖音你的三观多少岁免费测试app是一款非常好玩的三观测试软件,所谓三观,指的是价值观.人生观和世界观.三观对一个人的生活起着决定作用,所以拥有一个正确的三观太重要了.你的三观你了解么?如果对自己的三观 ...

  10. android+噪音测试,关于噪音测试App的选择与使用

    关于噪音测试App的选择与使用 2015-11-26 20:06:53 119点赞 224收藏 63评论 很多值友在写使用评测时都会对噪音大小进行测评,噪音污染在生活中无处不在,人们对噪声污染问题也越 ...

最新文章

  1. mysql和php的登录注册界面_php实现注册和登录界面的方法
  2. S3C2440中断跳转分析
  3. GridView CSS的样式表
  4. 转-由12306.cn谈谈网站性能技术
  5. 马云再出新语录:月入一两百万很高兴,挣一二十亿很难受
  6. CMU科学家们带一群机器人开房,并收集了28,000种不同的姿势
  7. linux开发 stc_Linux环境下搭建STC单片机平台的指南
  8. 2021-09-14 if__name__ == ‘__main__‘的用法
  9. 欧姆龙cp1h指令讲解_欧姆龙cp1h常用指令学习(十二)块程序
  10. php 邮箱反垃圾机制,避开反垃圾邮件机制的qq邮件群发技巧
  11. 流利阅读 2019.1.30 China’s Baidu pledges to improve search service after complaint
  12. java http 服务器搭建_基于http.server搭建局域网服务器过程解析
  13. word2003 字体和标点重叠在一起
  14. 《汇编语言程序设计教程》人民邮电出版社第二版习题及参考答案
  15. printf 打印结构体成员函数出错原因分析
  16. 软件工程导论第六版 第五章 总体设计知识点总结
  17. 学好SEO需要掌握哪些知识要点?
  18. 微机 微型计算机,微型计算机杂志
  19. 10个编写快速运行的Mathematica代码的小诀窍
  20. 如何整合内心的冲突和混乱,构建、形成自己的思维体系?

热门文章

  1. 外星人笔记本没有修复计算机,外星人笔记本如何恢复出厂设置
  2. 【饥饿游戏搜索算法】基于饥饿游戏搜索算法求解单目标优化问题(HGS)含Matlab源码
  3. 【PMP】项目生命周期和开发生命周期
  4. java给文件777权限_从今往后,谁再告诉你Linux上chmod -R 777解决权限,果断绝交
  5. Rhino学习教程——1.4
  6. dell计算机自动开机设置,dell台式电脑定时开机设置教程
  7. Win10内存占用过高但是实际没有多少进程
  8. 免费注册个体户营业执照出证教程
  9. GC基本原理学习(Garbage Collected)
  10. 手机时钟软件推荐,创意时钟APP介绍