优化细节令人惊叹,用户体验直接拉满!你的App也能如此丝滑!

news2024/9/20 17:22:36

启动时间是App使用者的第一体验,很多大厂都通过A/B实验论证启动速度的优化可以带来用户留存的显著收益,尤其是体量大的用户,启动时间缩短一点,留存增长一点,那就带来了非常大的收益。因此,启动性能优化一直是各大厂体验技术团队的重点投入。

为什么启动性能优化这么重要?

因为没有哪个开发团队一开始就可以直接把产品做到极致,中间总会遇到一些BUG,所以在产品上线前就需要不断的测试和优化,避免上线过程中出现一些白屏、闪屏、加载漫长、卡顿等情况BUG的出现,在开发者眼里通过用户体验,留存住用户才是王道。

性能优化始终穿插在 App 整个研发生命周期中,尤其是从 1 到 100的阶段,这个阶段增长开始平缓,性能优化就是突破增长瓶颈,提升日活天花板的主要方式。

像近几年的面试问的也越来越深入,比如以下问题:

  1. 在之前的项目中做过哪些性能优化,取得过哪些收益?
  2. 对于App启动时间这块,有什么心得?如何从线程、系统层面出发优化启动速度?
  3. JUC闭锁与AQS技术在启动架构设计中如何应用?
  4. IO优化是怎么做的,高频IO操作使用 SharedPreferences为什么会很卡,你有更好的解决方案吗?
  5. 流畅性这块,你们 App 的关注的指标是?这块有什么经验?你觉得造成页面卡顿最主要的原因是?有什么通用性的优化方案?
  6. ……

但大多数开发者更多的还是在做业务开发,对于性能优化基本停留在"听说过"或者"简单使用工具"的阶段,其中不乏一些工作多年的 Android 工程师。

当然如果想要精进,不仅要知道如何利用工具做性能优化,还要对底层原理充分了解,对架构设计有一定经验,例如你从任务管理角度做启动优化,就需要精通图论与框架设计,如果你对IO进行优化,就必须精通MMAP原理与框架封装的常用技术等…

这样才能够说得上是精通性能优化。

精通意味着

  1. 首先在大厂面试环节,性能优化基本是必问项,你可以展示出个人实力;
  2. 一旦你进入大厂,对性能优化了解越多,你能够做的事情就越多,产出也会越多,而且可以持续不断去做。

在一些面试中,也会看到一些朋友写“精通性能优化”,但是让其描述,往往就是一些自己编写的业务,一些去除页面多余嵌套、使用线程池、ViewStub 这些非常浅的方案。

其实更多的,面试官还是希望能够听到,线上复杂环境,低端机/弱网等因素下,用户触发的一系列的体验问题。

想要搞清楚这些,那么必须对各种底层原理有着深度的了解,对各种 case非常丰富的经验;很多朋友经常遇到措手不及的问题,大多是因为对出现问题的情况和处理思路模糊不清,导致此原因就是因为没有彻底搞懂底层原理。

比如下面这张 Android启动流程图,不少人都看过,但少有人沉下心去仔仔细细研究过。

对于上图来说,你能找到合理的优化位置吗?

作为过来人,发现很多学习者和实践者都在 Android 性能优化上面临着很多的困扰,比如:

  • 工作场景中遇到“性能优化”难题,往往只能靠盲猜和感觉,用临时性的补救措施去掩盖,看似解决了问题,但下次同样的问题又会发作,原因则是缺乏方法论、架构思维的指引以及工具支持
  • 能力修炼中,缺乏互联网项目这一实践环境,对“性能优化”只能通过理论知识进行想象,无法认识其在工作实战中的真实面目和实操过程
  • 职场晋升中,只管功能开发,不了解组件设计原理,缺少深入地思考与总结,无法完成高并发、高性能系统设计这类高阶工作,难以在工作中大展拳脚,而有挑战的工作往往留给有准备的人。

总之,一旦遇到性能问题,很少人能够由点及面逆向分析,最终找到瓶颈点和优化方法,可见性能优化需要对知识进行综合的掌握与灵活的运用,属于安卓知识领域的的深水区,也是衡量一个研发能力高低的标准之一

为了帮助到大家更好的全面清晰的掌握好性能优化,准备了相关的学习路线以及核心笔记(还该底层逻辑):https://qr18.cn/FVlo89 大家可以进行参考学习:

性能优化核心笔记:https://qr18.cn/FVlo89

启动优化

内存优化

UI优化

网络优化

Bitmap优化与图片压缩优化https://qr18.cn/FVlo89

多线程并发优化与数据传输效率优化

体积包优化

《Android 性能监控框架》:https://qr18.cn/FVlo89

《Android Framework学习手册》:https://qr18.cn/AQpN4J

  1. 开机Init 进程
  2. 开机启动 Zygote 进程
  3. 开机启动 SystemServer 进程
  4. Binder 驱动
  5. AMS 的启动过程
  6. PMS 的启动过程
  7. Launcher 的启动过程
  8. Android 四大组件
  9. Android 系统服务 - Input 事件的分发过程
  10. Android 底层渲染 - 屏幕刷新机制源码分析
  11. Android 源码分析实战

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

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

相关文章

济南中医风湿病医院受邀参加北坦街道“学习二十大 奋进新征程”主题党日活动

为学习贯彻党的二十大精神,中共天桥区北坦街道工作委员会于近日特组织开展“学习贯彻二十大精神 凝心聚力奋进新征程”联合主题党日活动,济南中医风湿病医院党支部预备党员卢雪梅同志受邀参加。 活动第一站,参观济南黄河文化展览馆。这是一部…

Microsoft Edge插件推荐:CSDN·浏览器助手

文章目录 1.简介2.安装3.总结 今天来给大家分享一个超级好用的Microsoft Edge插件,名为CSDN浏览器助手 1.简介 CSDN浏览器助手是一款集成本地书签、历史记录与 CSDN搜索(so.csdn.net) 的搜索工具,可以自定义Microsoft Edge的新标签页,还可以…

LangChain-Evaluation—如何评估LLM及其应用(三)

省流:目前没有真正完美的解决方案,比如分类有精度这样接近完美的评估方案,但LLM目前没有 This section of documentation covers how we approach and think about evaluation in LangChain. Both evaluation of internal chains/agents, b…

十五周算法训练营——背包问题

今天是十五周算法训练营的第十三周,主要讲背包问题专题。(欢迎加入十五周算法训练营,与小伙伴一起卷算法) 「背包问题:给你一个可装载重量为W的背包和N个物品,每个物品有重量和价值两个属性。其中第i个物品…

以加快工程和科学发展为使命,MathWorks 创新步履不止

一直以来,人类对于宇宙苍穹、高山峻岭的探索永不止步。今年是人类首次登月54周年,毋庸置疑,“登月计划”激发了全世界所有人的想象力。正由于这项计划,让耐高温的金属和合金防火面料、冻干食品及光伏电池、集成电路、计算机以及备…

解密Linux内核神器:内存屏障的秘密功效与应用方法

一、内存屏障简介 现在大多数现代计算机为了提高性能而采取乱序执行,这可能会导致程序运行不符合我们预期,内存屏障就是一类同步屏障指令,是CPU或者编译器在对内存随机访问的操作中的一个同步点,只有在此点之前的所有读写操作都执…

信号链噪声分析14

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 虽然噪声的均方根值可通过 q/√12 计算精确近似值,但在某些条件下,频域成分可能 与交流输入信号高度相关。例如,低幅度周期性信号的相关度大…

智慧厕所系统:革新公厕管理的智能解决方案

公厕是城市基础设施的重要组成部分,但由于管理难度大、人员分散等问题,公厕的管理一直是一个难题。智慧公厕系统通过智能化的监控设备和传感器,实时监测公厕的使用情况和卫生状况,并将数据传输到中央控制系统。管理员可以通过该系…

C++学习笔记-第8单元 运算符重载

第8单元 运算符重载 文章目录 第8单元 运算符重载单元导读单元导读1:深度学习与C单元导读2:向量、矩阵、张量 8.1 运算符重载与平面向量类8.1.1 运算符与函数的关系8.1.2 平面向量类8.1.3 C运算符函数8.1.4 [C11]左值、纯右值、将亡值 8.2 重载二元运算符…

极致呈现系列之终章:Vue3中封装Echarts组件

经过前面一系列博文的介绍,我已经详细地讲解了Echarts中涉及的各种图表类型。所以,我认为极致呈现系列文章到此基本告一段落了。作为这个系列文章的终章,我想探讨最后一个问题:如何封装Echarts组件。我觉得这是一个很好的结尾&…

黑马程序员-从0到1学习Linux-第一章 初识Linux

视频学习地址:黑马程序员新版Linux零基础快速入门到精通,全涵盖linux系统知识、常用软件环境部署、Shell脚本、云平台实践、大数据集群项目实战等_哔哩哔哩_bilibili 目录 操作系统概述 初识Linux系统 虚拟机介绍 VMware WorkStation安装 在VMware上…

【Langchain】GPT的高效插件

功能1:让模型具有memory 可以看到,langchain作为访问gpt的一个插件,可以让gpt模型通过memory变量将之前的对话记录下来,从而使模型具有记忆(在不改变模型参数的情况下)。 查看memory变量包含了什么&#…

在blender中使用python程序化建模

blender中,所有可以在Blender软件中的手动操作,基本都可以通过Python API 完成 那么就可以用这个完成程序化生成 下面我给出一个简单的方块建模程序: 在scripting中,可以添加file,然后向场景中心放置一个正方体 首…

前端面试题Vue答案

1.vue的原理? image.png 关键词: 虚拟DOM树访问器属性 解释一下:响应式原理? 当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty把这些 property 全部转为 getter/setter…

开关电源PFC电路原理详解及matlab仿真

PFC全称“Power Factor Correction”,意为“功率因数校正”。PFC电路即能对功率因数进行校正,或者说能提高功率因数的电路。 在电学中,功率因数PF指有功功率P(单位w)与视在功率S(单位VA)的比值。…

【Linux】fdisk命令参数详解(图文超详细,内容来自官方文档)

目录 0.环境 1.背景 2.内容--官方文档对fdisk的介绍 1)名称 2)说明 3)具体参数/选项 4)举个栗子,我要查fdisk的版本 0.环境 windows linux虚拟机 1.背景 之前发表了一篇文章Linux 用fdisk进行磁盘分区&#xff…

Python语法基础03(输入与while)

用户输入 使用input()函数可以获取输入,同时应说清楚所期待的输入内容 #使用函数input时,要说清楚期望的输入 carinput("Please input your favourite car.\nAnd i will repeat:") print(f"your favourite car is {car}")## 也可…

多元分类预测 | Matlab灰狼算法(GWO)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,GWO-HKELM分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab灰狼算法(GWO)优化混合核极限学习机(HKELM)分类预测,多特征输入模型,GWO-HKELM分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab…

NFTScan 与 Sender Wallet 达成合作伙伴,双方在多链 NFT 数据方面展开合作!

近日,NFT 数据基础设施 NFTScan 与 Web3 钱包 Sender Wallet 达成合作伙伴关系,成为其官方 NFT 数据供应商。NFTScan 将为 Sender Wallet 的 NFT 部分提供专业的多链 NFT 数据支持,确保用户可以跨多个区块链获得全面和实时的 NFT 数据。 Sen…

Latex 文献引用

来源: 引用 - 为什么叫 citet 和 citep?- TeX - LaTeX 堆栈交换 (stackexchange.com) 来源: latex \cite, \citet, \citep_latex citet_juliosun的博客-CSDN博客 来源:https://www.reddit.com/r/LaTeX/comments/5g9kn1/whats_th…