众所周知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优化时间用户等不了太久,那么传统的启动时间检测耗费人力物力资源,性价比并不高,友盟根据这些性能问题研发了启动分析功能,将帮助开发者渡过难关。