众所周知APP启动时间是用户对一款APP的第一印象,如果某一款APP启动时间要耗费8秒之久,那么,用户对研发成员的能力就会产生质疑,也会否定开发者辛辛苦苦熬夜赶出来的成果,这也是我们不想看到的,但是产生了性能问题我们就要勇敢的去面对,怎样检测APP启动时间呢?怎样能实时检测启动中发生的性能问题呢?就这篇文章来浅谈相关知识!
一、冷启动的相关知识
启动分为冷启动和热启动,一般的优化都是针对冷启动来进行,本文主要分析冷启动。
冷启动是Android性能测试中的重要指标,即应用从进程未创建到完全启动的时间,一般要求时长<1.5s,过长需要考虑优化。
比如:设备启动后,APP第一次Launch或者APP被Kill掉后的重启。这种类型的启动优化存在很大挑战,因为Android系统或应用还有其他更多的后台进程在运行。
启动流程大致如下:
点击Launcher 上的 icon开加载app -->立即显示白屏或黑屏等 --> Application onCreate --> Activity Init----> Activity onCreate ---> 初始化数据,填充显示View ---> Activity onResume等。
二、App 启动时间测量与分析
如何获取APP启动时间,请看以下测量方法
1.通过 adb 命令测量APP 冷启动时间
使用adb 命令直接启动APP进而测量APP启动耗时 的方法如下:
adb shell am start -W [packageName]/[packageName.MainActivity]`
或
adb [-d|-e|-s ] shell am start -S -W [packageName]/[packageName.MainActivity] -c android.intent.category.LAUNCHER -a android.intent.action.MAIN
2.通过 adb logcat 查看APP 启动时间
在Log中,主要是 通过分析 logcat中APP在 ActivityManager: Displayed的时间值 ,此时间值包含以下时间综合信息:
Launch 进程
初始化对象
创建并初始化Activity
填充布局
第一次绘制app 内容
3. 在代码中测量app启动性能的方法如下:
在Activity代码用调用 reportFullyDrawn(); 方法,将绘制完成后信息反馈到Log上,此方法跟logcat中查看的时间相似。
比如自己运行ProgramAndrod APP的启动时间信息如下
11-24 11:47:00.363 982 1191 I ActivityManager:
Fully drawn com.programandroid/.MainActivity: +998ms
reportFullyDrawn()方法告知系统app Launch 成功时间
4.使用工具——u-apm
友盟+u-apm性能检测工具
随着线上用户诉求的提高,很多开发同学也从线下测试性能演变到更关注线上性能问题,以此保障用户体验。根据这一问题友盟+也非常重视开发者面对应能监测的各类问题,新增了启动分析、内存分析、卡顿分析功能!这里主要讲启动分析功能。
启动分析:
启动场景是用户使用App的第一道关卡,启动慢、启动闪退都会直接从源头阻断客户使用,甚至会造成启动不成功新客户卸载的情况。很多技术团队都会以启动耗时作为重点性能监控指标。U-APM中启动分析包含启动趋势、慢启动分析和启动崩溃分析三大功能模块。
1、启动分析支持通过预置采集和个性化自定义两种方式定义启动阶段,可以分别查询首次启动、冷启动、热启动的情况效果,并可以与设备、系统、版本、地域等维度做交叉筛选查询。
2、用户也可以分别对首次启动、冷启动和热启动设置慢启动的业务定义。一般情况下,热启动的时间要远低于冷启动、首次启动的时间。慢启动分析可以分别监控三种情况下的慢启动设备数量,以及设备系统分布等信息,并且支持单一设备定点查询启动时序,精准定位问题。
3、启动崩溃分析中筛选出自定义的启动时限下的崩溃列表,更便于定位启动问题。
三、总结
根据文章介绍,随着用户诉求的提高,对于APP优化时间用户等不了太久,那么传统的启动时间检测耗费人力物力资源,性价比并不高,友盟根据这些性能问题研发了启动分析功能,将帮助开发者渡过难关。