探析Android中的四类性能优化_android中的性能优化(1),2024年最新你所不知道的HarmonyOS鸿蒙原生开发的现状
(备注鸿蒙获取)**[外链图片转存中…(img-SEdiPKH0-1712774025542)]

解决卡顿问题
我们现已经知道了三大类卡顿的原因,其归结来说的原因就是主线程中出现了不必要的耗时操作,导致最后主线程的UI绘制出现阻塞或者溢出。那么我们解决卡顿、做流畅性优化的方法也是很明确了,那就是让主线程尽量只做交互(Input Event)以及刷新(UI Draw)。当然很多需要在主线程中的代码是无法避免的,但是我们尽量使其缩小,让所有的耗时代码都在子线程中运行,这样子使得其减少丢帧,能够更加的连贯顺滑。

没有VSync会怎么样?
上述讲到了 VSync 的作用以及卡顿的原因和处理,我们知道 VSync 信号可以用于同步刷新页面。那若是没有 VSync 信号,我们的页面会出现什么样的问题?
其实会出现画面撕裂。画面撕裂是什么呢?如下图中红色框中的图面,与上边出现了撕裂,这种就是画面撕裂。其出现的原因是上一帧的页面还在绘制中,下一帧页面就继续占用资源绘制了,所以会出现几帧的页面同时绘制在一个页面中,出现了画面撕裂感。

那为何映入 VSync 信号之后就不会有画面撕裂问题了呢?
在显示一张图片的时候,其流程为:GPU进⾏渲染—>帧缓存区⾥ —>显示控制器—>读取帧缓存区信息(位图) —> 数模转化(数字信号处—>模 拟型号) —>(逐⾏扫描)显示。 正常的情况下,显示器完全显示完一帧后,帧缓存区更新一帧,这样便不会有撕裂问题,但事实并非如此。 当显卡输出帧的速度比显示器快,显示器的处理速度跟不上显卡,在显示器处理显卡丢过来的第1帧的时候,第2帧就又到了(帧缓存区已更新),导致同一个画面同时出现1、2两帧,撕裂就产生了
在没有 VSync 信号的时候,一旦GPU渲染完后就会交由屏幕去将其绘制出来,那么 CPU 和 GPU 处理的事件有长有短,一旦两帧出现绘制冲突,就会出现画面撕裂问题了。
所以说,解决画面撕裂的核心是决定好数据的交换时机(绘制时机)由谁来控制。在绘制中,不应该是 CPU 处理写入之后就立即绘制,而应该是由屏幕渲染完一帧之后才去绘制绘制下一帧。然而屏幕不是控制器,它无法控制什么时候进行绘制,但是它可以传递 VSync 信号给 Android 系统,借助 VSync 信号,Android 就可以让 CPU 在新的一帧开始的时候立即处理显示问题了。
VSYNC 信号是由屏幕(显示设备)产生的,并且以 60fps 的固定频率发送给 Android 系统,Android 系统中的 SurfaceFlinger 接收发送的 VSYNC 信号。VSYNC 信号表明可对屏幕进行刷新而不会产生撕裂。

图片中未对 VSync 信号进行处理,导致出现卡顿问题。
资源优化
资源是什么?
资源指的是:Android 手机的软件和硬件资源,通俗意义上应用依赖于移动端的有限资源和系统规定的数值。例如:功耗、存储、流量、系统参数、CPU、内存等。
我们对上述的资源进行优化的时候,其并非无关联的、相互隔离的,例如流量消耗大,那么功耗消耗也会大,内存和存储的消耗也会大。但是我们需要优化某一个点的时候,是需要聚焦于其中这一点进行优化的。
当然,我们使用的设备也是在不断地优化的,但是并非说等着硬件的优化,我们的软件能跑就行。对于资源优化,我们追求的是利用最小的资源达到最好的效果,这是很有挑战性,对自我提升也很高的事情。
Android 能做哪些资源优化


上图中展示了对于当下技术特征的满意度,我们会发现上述的点其实都不算高。无论是内存/存储、电量或者是流量等等方面都是需要我们继续优化的点。而右图指的是如果后台的进程如果很多的话,使得内存占用很多,导致前台的APP也会收到内存的限制变得卡顿。

上图中对音量的优化其实收益也是很大的。例如当下的自媒体平台抖音,它就是在端侧进行了音量优化,取得了很大的收益。因为每一个人拍视频的音量和背景嘈杂度都是不一样的,所以我们需要在上传视频到平台的时候进行音量优化,对各种音量进行优化、拟合到同一水平,这样子可以使得用户在打开不同视频的时候,视频的音量不会影响到用户的体验。


而对于亮度的优化,可以使得我们的功耗降低,节省手机有限的电量。上面左图可以看出,深色模式对电量的影响是很显著的。而同时在优化亮度的时候,我们也可以找出功耗与体验的平衡点,使得功耗低的时候,我们的体验感也是最好的。这一点可以在右图中看出。
稳定性优化

对于稳定性优化,我们主要讲的点是 ANR,而其他的崩溃等则是需要尽可能的抹去,这里暂不做分析。ANR 是应用长时间处于阻塞状态的时候,系统会触发 ANR ,然后系统会询问是否需要强制退出或者继续等待。
ANR 存在的的原因是我们不能因为一个程序出现问题就使得整个手机无法使用。所以需要 ANR 来将错误的程序退出。而我们对其优化则需要尽可能的减少这种情况的出现,使得用户被打断,这是一种很不好的体验。
诊断 ANR 时需要考虑以下几种常见模式:
- 应用在主线程上非常缓慢地执行涉及 I/O 的操作。
- 应用在主线程上进行长时间的计算。
- 主线程在对另一个进程进行同步 binder 调用,而后者需要很长时间才能返回。
- 主线程处于阻塞状态,为发生在另一个线程上的长操作等待同步的块。
- 主线程在进程中或通过 binder 调用与另一个线程之间发生死锁。主线程不只是在等待长操作执行完毕,而且处于死锁状态。
系统级优化

对于 Android 系统,Google 本身也对其系统做了很多重大的优化,这些优化使得 Android 系统很多的问题得以解决,很多使用体验变得更好。而这些优化的点,我们可以作为今后的思路,让我们对 APP 的优化有更广阔的思考,让我们能发掘出更多的优化点和对其有更加深刻的思考

对于业务开发中,我们很多时候都是使用到 Application 和 FrameWork 层,但是需要真正做好性能优化,我们需要了解到很多的 核心库 Kernel 层的原理,这对我们自身来说,也是正向的收益。
其实想要全面掌握好 Android 性能优化的话,这些知识点你必须要有所了解,如: 内存优化、网络优化、卡顿优化、存储优化……等,为了让大家一次都可以了解全,所以将其整合成名为《Android 性能优化核心知识点手册》,大家可以参考下:
《APP 性能调优进阶手册》:https://qr18.cn/FVlo89
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。


既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
(备注鸿蒙获取)**
[外链图片转存中…(img-SEdiPKH0-1712774025542)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
更多推荐

所有评论(0)