APP性能优化是我们进阶高级开发工程师的必经之路,而APP启动速度的优化,也是我们开启APP优化的第一步。用户在使用我们的软件时,交互最多最频繁的也就是APP的启动页面,如果启动页面加载过慢,很可能造成用户对我们APP的印象过差,进而消耗了用户的耐心,更严重可能导致用户的卸载行为。这也是微信始终坚持使用“一个小人望着地球”作为启动页面的背景,并且坚持不添加启动广告的原因。
那么系统卡顿就会造成APP启动时间过长,bugly和友盟+U-APM都是对系统卡顿检测的工具,两者使用起来,我觉得还是友盟+U-APM更加顺畅,友盟+U-APM是一站式的产品,不需要多次接入,后续功能接入成本极低。
APP的三种启动方式
应用的启动可以分为冷启动,热启动和温启动,而启动最慢、耗时最长的就是冷启动。
冷启动(cold start)
当应用启动时,后台没有该应用的进程(常见如:进程被杀、首次启动等),这时系统会重新创建一个新的进程分配给该应用。
热启动(hot start)
这种启动会从已有的进程中来启动应用,通俗来讲就是已经启用的应用,通过back键或者home键回到系统主界面,再次通过最近任务重新打开Activity的过程。开销比冷启动更小。
暖启动(warm start)
暖启动产生的场景很多。常见如:1.用户使用返回键退出应用,然后马上又重新启动应用。2.应用被内存清除,再次打开应用,会通过OnCreate()中保存的实例状态恢复。
冷启动是从头开始启动APP,而其他两种启动方式是从后台活动返回到前台的一个过程。热启动和暖启动没有明显的区分界限,我们姑且把热启动和暖启动统称为热启动。开发中我们更多的关注冷启动优化。
二、APP的冷启动过程
冷启动开始时,系统会依次执行三个任务去启动APP:
加载和启动应用程序
APP启动后,立即创建一个空白的启动Window
创建APP的进程
在这三个任务执行后,系统创建了应用进程,那么应用进程接下来会执行下一步:
创建APP对象
开启一个主线程
创建启动页的Activity
加载View
布局view到屏幕
进行初始绘制显示视图
当应用进程完成初始绘制之后,系统进程用启动页的Activity来替换当前显示的空白Window,这个时刻用户就可以使用App了。
三、友盟+U-APM首次启动和冷启动支持启动阶段性能拆解的解释
安卓的定义为:
初始化耗时:init时间为application的attachBaseContext方法开始到结束
页面构建耗时:build时间为application的attachBaseContext方法结束到application的onCreate方法结束
页面加载耗时:load时间为application的onCreate方法结束到页面onResume
iOS的定义为:
Pre-初始化耗时:从进程开始函数exec开始到指定+load执行的阶段
初始化耗时:从指定的+load执行到finishLaunching的阶段
应用构建耗时:从finishLaunching到FirstVC.viewDidLoad()的阶段
页面加载耗时:从FirstVC.viewDidLoad()到FirstVC.viewDidAppear()结束,首次渲染完成
其他指标:
慢启动:在首次启动/冷启动/热启动的启动类型中,超过自设置阈值的启动被定义为慢启动,默认首次启动/冷启动超过3秒为慢启动,热启动超过1秒为慢启动
启动崩溃:在启动阶段中出现的崩溃信息,支持划分首次启动、冷启动、热启动状态下的崩溃,默认启动耗时上限为8秒,超出时间的崩溃不被划分至启动崩溃,您可以在启动设置中子定义启动耗时上限,可以自定义设置启动上限,最高值为20秒
自定义性能分解:您可以在SDK中自定义启动阶段的拆解,自定义埋点的阶段分解会在启动趋势-性能分解和慢启动详情的启动时序图中展示
在APP优化启动时间的过程中,我们的收获不仅是对启动时间的优化,也对系统的启动机制有了更深的了解,同时优化了我们自己的代码,使其变得更加健壮和高性能。友盟+U-APM是一款很好的APP检测工具,通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力,及卡顿、启动分析等性能能力,支持多场景、多通道智能告警监控,帮助开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。另外还提供云真机测试能力,助力开发者从研发测试质量验收到线上问题复现排查,保障应用品质,提升测试效率。在云真机测试期间自动采集崩溃信息,提供详尽的崩溃报告协助筛查,真正实现监控测试全流程深度打通。