近些年来,安卓开发的脚步从未停歇,经过数年的发展,Android技术优化日异月新,如今Android 11 已经发布,Android系统的性能也已经非常流畅,体验感五颗星!来回切换APP,未有卡顿、闪退等现象,整个过程可以说是十分“丝滑”~
但是,到了各大厂商手里,改源码、自定义系统,使得Android原生系统变得鱼龙混杂,然后到了不同层次的开发工程师手里,因为技术水平的参差不齐,导致打开应用之后,依然存在卡顿等现象。另外,功能越来越复杂,UI页面也越来越丰富,也成为影响流畅运行的一种因素。综上所述,对APP进行性能优化已成为开发者能够完成高质量应用程序作品的保证。那么接下来,我来给大家简单介绍下关于安卓性能优化方面的事项!
一、在Android应用优化方面,我们主要从以下4个方面进行优化:
1、稳定(内存溢出、崩溃)
2、流畅(卡顿)
3、耗损(耗电、流量、网络)
4、安装包(APK瘦身)
二、内存优化
由于Android应用的沙箱机制,每个应用所分配的内存大小是有限度的,内存太低就会触发LMK(Low Memory Killer)机制,进而会出现闪退现象。如果要对内存进行优化,就需要先搞懂java的内存是如何分配和回收的。
三、交互优化
交互是与用户体验最直接的方面,交互场景大概可以分为四个部分:UI 绘制、应用启动、页面跳转、事件响应。对于上面四个方面,大致可以从以下两个方面来进行优化:
1、界面绘制:主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在 UI 和启动后的初始界面以及跳转到页面的绘制上。
2、数据处理:导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据在处理 UI 线程,二是数据处理占用 CPU 高,导致主线程拿不到时间片,三是内存增加导致 GC 频繁,从而引起卡顿。
我们知道,Android的绘制需要经过onMeasure、onLayout、onDraw等几个步骤,所以布局的层级越深、元素越多、耗时也就越长。还有就是Android 系统每隔 16ms 发出 VSYNC 信号,触发对 UI 进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需的 60FPS。如果某个操作花费的时间是 24ms ,系统在得到 VSYNC 信号时就无法正常进行正常渲染,这样就发生了丢帧现象。
另外,之所以出现卡顿现象,是因为有两个原因:
①.绘制任务太重,绘制一帧内容耗时太长
②.主线程太忙,根据系统传递过来的 VSYNC 信号来时还没准备好数据导致丢帧。
那么,基于问题产生的原因,我们可以从多个方面进行优化,今天就先简单跟大家讲解其中一个方面,那就是:布局优化。
四、布局优化
在Android种系统对View进行测量、布局和绘制时,都是通过对View数的遍历来进行操作的。如果一个View数的高度太高就会严重影响测量、布局和绘制的速度。Google也在其API文档中建议View高度不宜过10层。现在版本中Google使用RelativeLayout替代LineraLayout作为默认根布局,目的就是降低LineraLayout嵌套产生布局数的高度,从而提高UI渲染的效率。
在布局优化方面,我们还可以从以下几个方面进行优化:
①.布局复用,使用标签重用layout;
②.提高显示速度,使用延迟View加载;
③.减少层级,使用标签替换父级布局;
④.注意使用wrap_content,会增加measure计算成本;
⑤.删除控件中无用属性;
另外,我认为分析、诊断和检测也很重要;比如说在使用系统过程当中,出现了崩溃现象,那么我们就可以使用“友盟U-APM”来分析崩溃的原因,然后修复漏洞,从而达到性能优化的目的!U-APM应用性能监控平台,通过轻量级的集成接入即可拥有实时、可靠、全面的应用崩溃、ANR、自定义异常等捕获能力, 及卡顿、启动分析、内存分析、网络分析等性能监测能力,支持多场景、多通道智能告警监测,帮助 开发者高效还原异常、卡顿用户的访问路径和业务现场,缩短故障排查时间。提供云真机测试能力, 助力开发者从研发测试质量验收到线上问题复现排查,保障应用品质,提升测试效率。在云真机测试 期间自动采集崩溃信息,提供详尽的崩溃报告协助筛查,真正实现监控测试全流程深度打通。