Android性能优化:一线架构师带你看清APP启动优化、内存优化、崩溃优化、屏幕适配隐藏的秘密

前言

在Android开发这个行业想进入大厂,有好的学历可能有优势一些(软实力)。

如果搞硬实力(技术技能)去拼也是有机会的,例如专攻性能优化方面,成为这方面的高手,因为所有 APP 开发都离不开优化这个重要的环节,而且也是目前招聘过程中比较稀缺的人才

Android性能优化:一线架构师带你看清APP启动优化、内存优化、崩溃优化、屏幕适配隐藏的秘密_第1张图片

为什么性能优化是开发中最重要的一部分?

因为每个开发者开发出的产品都不能肯定一次就可以做到最优,所以在产品在上线前就需要不断的测试和优化,等到产品上线时要避免一些闪退、卡顿等情况BUG的出现。用户在使用产品过程的中,优秀的交互体验是我们留住用户不可或缺的一部分,面试中面试官也会以性能优化这方面的技术点和你掰头。

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

  1. 在之前的项目中做过哪些性能优化,取得过哪些收益?
  2. 对于App启动时间这块,有什么心得?如何从线程、系统层面出发优化启动速度?
  3. 对于内存优化,你觉得需要做哪些事情?Java/Native 内存泄漏如何检测与处理?
  4. 流畅性这块,你们 App 的关注的指标是?这块有什么经验?你觉得造成页面卡顿最主要的原因是?有什么通用性的优化方案?

性能优化始终穿插在 App 整个研发生命周期中,不管是从 0 到 1 的建立阶段,还是从 1 到 N 打磨阶段,都离不开性能优化

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

当然如果想要精进,不仅要知道如何利用工具做性能优化,还要对底层原理充分了解,对 Linux 底层相关知识也要充分了解,例如你从线程角度做启动优化,你需要了解在 Linux 层线程的 nice 值,线程优先级对调度的影响等...

这样才能够精通某一个领域的性能优化

精通意味着

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

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

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

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

更多有关Android性能优化的分享

优化心得和实战经验

性能问题是造成App用户流失的罪魁祸首之一。App的性能问题包括崩溃、网络请求错误或超时、响应速度慢、列表滚动卡顿、流量大、耗电等等。而导致App性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线程、锁、系统函数、编程范式、数据结构等导致的。即便是最有经验的程序员,也很难在开发时就能避免所有导致性能低下的“坑”,因此解决性能问题的关键是在于能不能尽早地发现和定位这些“坑”。

1、移动端性能监控方案Hertz
2、Android性能优化后续
3、Android性能优化之虚拟机调优
4、Android UI 性能优化
5、性能提示
6、美团外卖Android Lint代码检查实践
7、使用Android Studio和MAT进行内存泄漏分析
8、手淘全链路性能优化
9、手Q Android缓存监控与优化实践
10、微信读书(Android)阅读引擎卡顿监控测试

Android性能优化:一线架构师带你看清APP启动优化、内存优化、崩溃优化、屏幕适配隐藏的秘密_第2张图片

响应速度

启动时间和响应时间是App带给用户的最直观的性能体验。因此,无论是何种类型的App,我们都不能忽视响应时间的测试。除了稳定性以外,对于性能纬度来说,哪个方面的性能是最重要的呢?毫无疑问,就是应用的启动速度。

1、 Android App 启动优化全记录
2、Android 中如何计算 App 的启动时间?
3、应用启动时间
4、Android 冷启动优化除了老三样还有哪些新招?
5、支付宝 App 构建优化解析:通过安装包重排布优化 Android 端启动性能
6、Redex 初探与 Interdex:Andorid 冷启动优化

Android性能优化:一线架构师带你看清APP启动优化、内存优化、崩溃优化、屏幕适配隐藏的秘密_第3张图片

流畅度

在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。

另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。

1、Android 中的卡顿丢帧原因概述 - 方法论
2、Android 中的卡顿丢帧原因概述 - 系统篇
3、Android 中的卡顿丢帧原因概述 - 应用篇
4、Android 无障碍服务导致的整机卡顿案例分析
5、显示性能指标
6、渲染速度缓慢
7、Android 流畅度检测原理简析
8、Android JankTracker 原理解析
9、App流畅度优化:利用字节码插桩实现一个快速排查高耗时方法的工具

Android性能优化:一线架构师带你看清APP启动优化、内存优化、崩溃优化、屏幕适配隐藏的秘密_第4张图片

内存

Android 低内存会导致性能问题 , 具体表现就是响应慢和卡顿 。比如启动一个应用要花比平时更长的时间 ;滑动列表会掉更多帧 ;后台的进程减少导致冷启动变多 ;手机很容易发热发烫等 。

1、 Android 中低内存对性能的影响
2、 Android OOM案例分析
3、 Android 代码内存优化建议 - Android 资源篇
4、 Android 代码内存优化建议 - Android 官方篇
5、 Android 代码内存优化建议 - Java 官方篇
6、 Android 内存优化(1) - MAT 使用入门
7、 Android 内存优化之二 - MAT使用进阶
8、 Android 内存优化之三 - 打开 MAT 中的 Bitmap 原图
9、 Android 代码内存优化建议 - OnTrimMemory 优化
10、Android LowMemoryKiller原理分析
11、Android匿名共享内存(Ashmem)原理

Android性能优化:一线架构师带你看清APP启动优化、内存优化、崩溃优化、屏幕适配隐藏的秘密_第5张图片

图形栈

Android系统中图形系统是相当复杂的,包括WindowManager,SurfaceFlinger,Open GL,GPU等模块。 其SurfaceFlinger作为负责绘制应用UI的核心,从名字可以看出其功能是将所有Surface合成工作。 不论使用什么渲染API, 所有的东西最终都是渲染到”surface”. surface代表BufferQueue的生产者端, 并且 SurfaceFlinger所消费, 这便是基本的生产者-消费者模式. Android平台所创建的Window都由surface所支持, 所有可见的surface渲染到显示设备都是通过SurfaceFlinger来完成的.

1、 LWN大作:Android display pipeline本身以及进程调度!
2、 Android 中的 Hardware Layer 详解
3、 Android硬件加速原理与实现简介
4、 Android图形系统概述
5、 Choreographer原理
6、 SurfaceFlinger启动篇
7、 SurfaceFlinger绘图篇
8、 Android应用程序UI硬件加速渲染技术简要介绍和学习计划
9、 Android应用程序UI硬件加速渲染环境初始化过程分析
10、Android应用程序UI硬件加速渲染的预加载资源地图集服务(Asset
Atlas Service)分析
11、Android应用程序UI硬件加速渲染的Display List构建过程分析
12、Android应用程序UI硬件加速渲染的Display List渲染过程分析
13、Android应用程序UI硬件加速渲染的动画执行过程分析
14、Android中的GraphicBuffer同步机制-Fence
15、Android P 图形显示系统——硬件合成HWC2
16、Android P 图形显示系统——Android VirtualDisplay解析
17、Android P 图形显示系统—— 上层Client和SurfaceFlinger的交互
18、Android P 图形显示系统—— SurfaceFlinger合成流程(一)
19、Android P 图形显示系统—— SurfaceFlinger合成流程(二)

Android性能优化:一线架构师带你看清APP启动优化、内存优化、崩溃优化、屏幕适配隐藏的秘密_第6张图片

如果你也想提升自己移动开发的性能优化技术,或者是正在准备移动开发岗的面试,我觉得这份笔记你必定不能错过。以上内容都是免费分享,点击这里即可免费获取!

最后

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

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

总之,一旦遇到“性能优化”问题,很少人能够由点及面逆向分析,最终找到瓶颈点和优化方法,而性能优化是软件工程的深水区,也是衡量一个程序员能力高低的标准。 

你可能感兴趣的:(Android性能优化:一线架构师带你看清APP启动优化、内存优化、崩溃优化、屏幕适配隐藏的秘密)