时间启动测试的意义:良好的用户体验
APP启动的三种状态:冷启动、热启动、温启动
冷启动:当应用启动时,后台没有该应用的进程,系统会重新创建一个进程分配给该应用,也就是实例化application如APP首次安装后打开
冷启动的流程即为APP启动流程的全过程,需要创建APP进程,加载相关资源,启动Main Thread,初始化首屏activity
热启动:当应用启动时,后台已有该应用的进程,这时会从已有的进程来启动activity(不需要重新创建application),如:按home键退出,按back键退出,进程是保存在后台的
温启动:介于冷启动和热启动之间
首次启动(冷启动):首次启动会做一些系统初始化工作,如缓存目录的生产,数据库的建立,SharedPreference的初始化,如果存在多 dex 和插件的情况下,首次启动会有一些特殊需要处理的逻辑,而且对启动速度有很大的影响
备注:为了保存软件的设置参数,Android平台为我们提供了一个SharedPreferences接口,它是一个轻量级的存储类,特别适合用于保存软件配置参数。使用SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data//shared_prefs目录下
测试项:
1.冷启动速度
2.热启动速度
3.首次启动
操作步骤:
1、获取包名:adb shell pm list packages
2、获取启动Activity名
执行命令:adb shell am start -S -W [packageName]/[packageName.MainActivity]
-S 启动页面前先强制停止应用, -W 等待启动完成
测试冷启动:
1.首次安装完APP,不打开
执行命令:adb shell am start -W [packageName]/[packageName.MainActivity]
2.将APP从后台杀死
3.执行命令:adb shell am start -W [packageName]/[packageName.MainActivity]
测试暖启动:
1.点击物理返回键或home键
执行命令:adb shell am start -W [packageName]/[packageName.MainActivity]
测试结果如下图所示
ThisTime:一般和TotalTime时间一样,除非在应用启动时开了一个透明的Activity预先处理一些事再显示出主Activity,这样将比TotalTime小
TotalTime:应用的启动时间,包括创建进程+Application初始化+Activity初始化到界面显示(一般需要关注这个时间,开发可根据这个时间去判断是否需要优化)
WaitTime:一般比TotalTime大点,包括系统影响的耗时
拓展知识:
针对application的介绍:
Application 是用来维护应用程序全局状态[maintain global application state]的基础类,Android系统会为每个程序运行时创建一个Application类的对象且仅创建一个,所以Application可以说是单例模式的一个类。且 Application 对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局唯一的,所以在不同的Activity、Service中获得的对象都是同一个对象。所以通过 Application 来进行一些数据传递、数据共享、数据缓存等操作
常见用途:
1.初始化资源,APP启动时会在application的oncreate()方法中初始化一些全局资源,系统配置,三方sdk等
2.数据共享,由于application对象是全局唯一的,所以可以用来缓存一些全局变量,这些变量在任何地方都可以调用,达到共享目的
3.监听APP所处状态,锁屏开屏,退到后台回到前台,退出应用等