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

简介: 移动端性能对用户体验、留存有着至关重要的影响,作为开发者是不是被这样吐槽过,“这个 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 其他功能,可以登录 官方网站 去体验。

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三重框架构建和威胁情报及时可达,山石网科发布StoneOS 5.5R9

升级的StoneOS 5.5R9版本,在预测与发现、防御与控制、检测与分析、响应与管理四个角度,通过云端运营中心的情报赋能和统筹运维,策略助手的访问链接发现,边界流量过滤的IP快速分类与阻断,精确边缘策略对用户与应用的精细…

Apache Flink 在京东的实践与优化

简介: Flink 助力京东实时计算平台朝着批流一体的方向演进。 本文整理自京东高级技术专家付海涛在 Flink Forward Asia 2020 分享的议题《Apache Flink 在京东的实践与优化》,内容包括: 业务演进和规模容器化实践Flink 优化改进未来规划一、业…

云端攻防的最后战场,腾讯主机安全旗舰版发布

在刚刚过去的12月里,Apache Log4j 漏洞席卷全球,成为互联网安全领域暴热的话题。而Log4j的破坏力也十分惊人,全球数亿台设备都可能受到影响,攻击者仅需一段代码就可能远程控制服务器。而这场风波一直影响至今,几乎所有…

华为鸿蒙系统p40,华为鸿蒙OS系统正式亮剑!华为P40再次确认:双打孔+麒麟990+鸿蒙OS...

众所周知,华为Mate 系列、P系列产品一直都是华为高端旗舰机型,在整体外观设计、综合性能、拍照等方面,也都是华为最为顶尖的旗舰机型,但在售价方面却遭到了很多“性价比”用户的吐槽,纷纷吐槽华为Mate系列、P系列产品“…

Flink 在顺丰的应用实践

简介: 顺丰基于 Flink 建设实时数仓的思路,引入 Hudi On Flink 加速数仓宽表,以及实时数仓平台化建设的实践。 本⽂由社区志愿者苗文婷整理,内容源⾃顺丰科技大数据平台研发工程师龙逸尘在 Flink Forward Asia 2020 分享的《Flink…

搭建一个高可用的镜像仓库,这是我见过最详细、最简单的教程

作者 | 小碗汤来源 | 我的小碗汤今天分享一篇搭建一个高可用镜像仓库的教程。详细中夹杂着简单~。Harbor 部署架构图harbor 使用 helm 部署在 k8s 集群中,通过 ingress-nginx 代理。pgsql 采用 Pgpool-II 代理,做主从切换、通过同步流式复制进行数据复制…

onclick 源码_精读:手写React框架 解析Hooks源码

写在开头:去年发表过一篇手写React,带diff算法,异步setState队列的文章,有一位阿里的朋友在下面评论,让我可以用hooks实现一次,也很简单,我当时觉得,这人有病,现在回过头来看&#x…

EMR on ACK 全新发布,助力企业高效构建大数据平台

简介: 阿里云 EMR on ACK 为用户提供了全新的构建大数据平台的方式,用户可以将开源大数据服务部署在阿里云容器服务(ACK)上。利用 ACK 在服务部署和对高性能可伸缩的容器应用管理的能力优势,用户只需要专注在大数据作业…

华为120hz鸿蒙系统,华为亮剑,120Hz+鸿蒙系统+5500mAh,竟然如此销魂

原标题:华为亮剑,120Hz鸿蒙系统5500mAh,竟然如此销魂随着制造工艺的不断成熟,智能手机也迎来了前所未有的发展,同时这也导致了手机厂商们之间的竞争变得愈发的激烈了。众所周知,华为手机是一个深受普通老百…

云上应用系统数据存储架构演进

简介: 回顾过去二十年的技术发展,整个应用形态和技术架构发生了很大的升级换代,而任何技术的发展都与几个重要的变量相关。本文将会给大家分享应用系统数据架构的演进以及云上的架构最佳实践。 作者 | 木洛 来源 | 阿里技术公众号 一 前言 …

深入解析 Dubbo 3.0 服务端暴露全流程

简介: 随着云原生时代的到来,Dubbo 3.0 的一个很重要的目标就是全面拥抱云原生。正因如此,Dubbo 3.0 为了能够更好的适配云原生,将原来的接口级服务发现机制演进为应用级服务发现机制。 作者介绍 熊聘,Github账号pin…

jquery将html转换word,HTML代码转word!亲测!可用!!!

现在项目中遇到一个需求,就是一个富文本编辑区中,有echars表格。用户点击保存按钮,需要导出为word文档。因为现在接手的项目,是基于上一个项目的框架。两个项目功能点差不多。但是在导出word这块,是后台java做的。也就…

智能搜索推荐一体化营收增长解决方案

简介: 图数据库GDB提供智能搜索推荐一站式服务,基于达摩院的智能搜索推荐算法和知识图谱技术,助力企业快速过渡冷启动过程,面向业务场景定制化方案,以提升核心业务指标,实现业务营收增长。 方案架构 方案特…

Redis 使用 List 实现消息队列的利与弊

作者 | 码哥字节 来源 | 码哥字节 分布式系统中必备的一个中间件就是消息队列,通过消息队列我们能对服务间进行异步解耦、流量消峰、实现最终一致性。 目前市面上已经有 RabbitMQ、RochetMQ、ActiveMQ、Kafka等,有人会问:“Redis 适合做消息队…

阿里云表格存储全面升级,打造一站式物联网存储新方案

简介: 阿里云表格存储全面升级,打造一站式物联网存储新方案 2021年9月1日,阿里云表格存储Tablestore重磅发布新能力:一站式物联网存储IoTstore。该新能力是阿里云表格存储Tablestore面向物联网深度垂直场景进行的一次技术升级&am…

手把手一起 图形化安装 k8s 集群

作者 | 小碗汤来源 | 我的小碗汤今天接着上一节,使用 KuboardSpray 图形化安装kubernetes集群[1],记录了安装时可能遇到的问题。对此项目感兴趣的同学,不妨亲手实践一下~以下记录了安装单节点(单master的集群)&#xf…

Jaeger插件开发及背后的思考

简介: 本文主要介绍Jaeger最新的插件化后端的接口以及开发方法,让大家能够一步步的根据文章完成一个Jaeger插件的开发。此外SLS也推出了对于Jaeger的支持,欢迎大家试用。 随着云原生 微服务的推广和落地,服务监控也变得越来越重…

基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-架构篇

简介: 本文简要介绍了基于 MySQL 结合 Tablestore 的大规模订单系统方案。这种方案支持大数据存储、高性能数据检索、SQL搜索、实时与全量数据分析,且部署简单、运维成本低。 作者 | 弘楠 来源 | 阿里技术公众号 一 背景 订单系统存在于各行各业&#…

ajax返回来总是html,ajax返回类型

基于arcgis的webgis开发中目前是否还直接用ajax技本人是arcgis刚接触者,以前有听说过ajax这个技术,用于浏览器和web服务ajax技术现在依然是客户端浏览器和服务器交互的重要手段。 如果你用arcgis api for js技术,同样会使用ajax技术。这是良好…

三分钟教你用 Scarlet 写一个 WebSocket App

作者 | Eason来源 | 程序员巴士在移动应用程序中,数据层是屏幕上显示内容的真实来源。然而,在今年早些时候在 Tinder 中集成了 WebSocket API 时,维护它成为了一个令人头疼的问题。为了在 Android 上更轻松地集成 WebSocket,Scarl…