移动端性能优化系列—启动速度

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 移动端性能对用户体验、留存有着至关重要的影响,作为开发者是不是被这样吐槽过,“这个 APP 怎么这么大?”、“怎么一直在 APP 封面图转悠,点不进去”、“进入详情效果有些卡”、“用 4G 使用你们的 APP,我的流量有点不够啊”等等,这些问题都直观反映出,一个体验良好的应用,只有功能健全还不够。

本文出自于“「2021 友盟+ 移动应用性能挑战赛」” 中的参赛作品,作者:梓明;该文章表述了作者如何借助友盟+ U-APM 工具解决了启动问题。


移动端性能对用户体验、留存有着至关重要的影响,作为开发者是不是被这样吐槽过,“这个 APP 怎么这么大?”、“怎么一直在 APP 封面图转悠,点不进去”、“进入详情效果有些卡”、“用 4G 使用你们的 APP,我的流量有点不够啊”等等,这些问题都直观反映出,一个体验良好的应用,只有功能健全还不够,以下是我在性能优化上总结的几点:

  • 启动速度优化
  • 流畅度优化
  • 资源优化
  • 内存优化
  • APK体积优化


今天先聊聊,启动速度的那些事

应用启动流程

冷启动


从点击应用图标到UI界面完全显示且用户可操作的全部过程。

特点:耗时最多,衡量标准

启动流程:Click Event -> IPC -> Process.start -> ActivityThread -> bindApplication -> LifeCycle -> ViewRootImpl


热启动


因为会从已有的应用进程启动,所以不会再创建和初始化Application,只会重新创建并初始化Activity。

特点:耗时较少

启动流程:LifeCycle -> ViewRootImpl

因此判断应用启动速度的的标准是冷启动的速度,即杀掉应用后重新启动的速度,此项主要是和你的竞品对比。

不应在 Application 以及 Activity 的生命周期回调中做任何费时操作,具体指标大概是你在 onCreate,onResume,onStart 等回调中所花费的总时间最好不要超过 400ms,否则用户在桌面点击你的应用图标后,将感觉到明显的卡顿。


冷启动分析及优化方向

冷启动涉及的相关任务

冷启动之前

首先,会启动 App

然后,加载空白 Window

最后,创建进程

需要注意的是,这些都是系统的行为,一般情况下我们是无法直接干预的。

随后任务

首先,创建 Application

启动主线程

创建 MainActivity

加载布局

布置屏幕

首帧绘制


通常到了界面首帧绘制完成后,我们就可以认为启动已经结束了。


下面是官方文档中的启动过程流程图,显示系统进程和应用进程之间如何交接工作。实际上对启动流程的简要概括。

优化方向

我们的优化方向就是 Application 和 Activity 的生命周期这个阶段,启动中的系统任务我们无法干预,能干预的就是在创建应用和创建 Activity 的过程中可能会出现的性能问题。这一过程具体就是:


Application 的 attachBaseContext

Application 的 onCreate

activity 的 onCreate

activity 的 onStart

activity 的 onResume


activity 的 onResume 方法完成后才开始首帧的绘制。所以这些方法中的耗时操作我们是要极力避免的。 并且,通常情况下,一个应用的主页的数据是需要进行网络请求的,那么用户启动应用是希望快速进入主页以及看到主页数据,这也是我们计算启动结束时间的一个依据。


U-APM 在启动优化上的应用


以前使用友盟统计来分析 App 日活、埋点等数据,发现友盟推出的 U-APM ,赶紧来尝尝鲜。


U-APM 是友盟+推出的 App 稳定性监控、性能监控和云真机测试平台。通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力,及卡顿、启动分析等性能能力,支持多场景、多通道智能告警监控,帮助开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。就启动分析这项能力来看看,U-APM 都做了什么。


U-APM 支持启动趋势分析、慢启动分析、启动崩溃分析。


启动趋势分析


启动趋势较为直观的展示应用启动耗时的平均值、分位值、区间分布等数据,以及启动阶段的性能分解数据,也能分析出,多版本迭代后,启动时间的分布状况。


慢启动分析


慢启动分析,有助于开发者追根溯源,该功能展示慢启动情况的占比以及慢启动设备列表,您可以在启动设置中自定义慢启动的划分,默认首次启动/冷启动超过3秒为慢启动,热启动超过1秒为慢启动。


冷启动阶段的慢启动分析,直观表现出慢启动比例以及慢启动平均耗时。

慢启动分布,直观表现出,慢启动分布的设备、系统、运营商、版本、渠道、地域。


启动崩溃分析

归纳启动阶段中出现的崩溃信息,支持划分首次启动、冷启动、热启动状态下的崩溃,默认启动耗时上限为8秒,超出时间的崩溃不被划分至启动崩溃。

这对减少应用启动时间,提供了巨大帮助,官方已提供Demo


总结

移动端性能优化环环相扣,启动时间优化也是较为重要的一个环节,U-APM 的出现,无疑是开发者的福利,帮助开发者及早发现问题,解决问题,至于 U-APM 其他功能,可以登录 官方网站 去体验。

相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
相关文章
|
1月前
|
UED 开发者
移动应用性能优化实战
移动应用性能优化实战
|
7月前
|
缓存 前端开发 JavaScript
使用Web前端性能优化提高网站加载效率
前端性能优化关键在于提高用户体验和降低资源消耗,Webpack是重要工具。基础优化策略包括减少HTTP请求、资源压缩与缓存、异步加载。Webpack优化配置涉及Tree Shaking、代码分割。高级策略涵盖Long-term Caching、缓存提升和插件优化。打包部署时,自动化流程和环境管理也至关重要。通过这些方法,可提升Web应用速度和体验。
189 0
|
5月前
|
缓存 前端开发 JavaScript
前端常见的性能优化方案?
【7月更文挑战第14天】前端性能优化包括代码压缩、资源合并、图片优化、缓存策略和DOM操作改进。例如,压缩CSS、JS,懒加载图片,使用CDN,事件委托,启用HTTP/2,及利用性能工具进行评估和优化。目标是加快加载速度,提升用户体验和服务器效率。
78 2
|
7月前
|
缓存 JavaScript CDN
如何优化Uniapp应用程序的性能?
如何优化Uniapp应用程序的性能?
339 0
|
7月前
|
缓存 前端开发 JavaScript
前端如何性能优化
前端如何性能优化
45 0
|
缓存 前端开发 JavaScript
前端如何进行性能优化的方法(详细版本)
每当有人访问您网站上的页面时,浏览器都必须请求大量文件。这些HTTP请求直接影响网页的加载速度。通常,更少的HTTP请求意味着网站加载速度更快。 现在,网站的加载速度是搜索引擎排名的重要因素。平均而言,媒体页面加载速度为谷歌的10个结果只是1.65秒。
165 0
|
缓存 前端开发 JavaScript
前端项目性能优化方案有哪些
前端项目性能优化方案有哪些
187 0
|
前端开发 JavaScript UED
前端常见的性能优化总结
前端常见的性能优化总结
151 0
|
测试技术 开发工具 Android开发