acecase 发表于 2022-4-8 10:48

5G时代,App最重要的竞争力应该是什么?

用过Android和iOS的朋友应该印象比较深,相比于iOS,Android用的时间越长就会越卡.在这个网络都追求5G了的时代,“卡”这个体验显然成为了一个极拉低印象分的问题,那么该如何对产品进行优化,提高用户体验呢?
Android的性能优化,主要从以下几个方面开展:
稳定(内存溢出、崩溃)
流畅(卡顿)
耗损(耗电、流量)
安装包(APK瘦身)
影响稳定性的原因很多,比如对内存使用不够合理、代码异常、场景考虑不周全、代码逻辑不合理等,都会让应用的稳定性出现问题。其中最常见的两个场景是:Crash 和 ANR,这两个错误将会使得程序彻底崩溃。所以做好Crash全局监控,处理闪退同时把崩溃信息、异常信息收集记录起来,以便后续分析;合理使用主线程处理业务,不要在主线程中做耗时操作,防止ANR程序无响应发生。


image.png

(一)稳定——内存优化
(1)Memory Monitor 工具:Android Studio自带的一个内存监视工具,它可以很好地帮助我们进行内存实时分析。通过点击Android Studio右下角的Memory Monitor标签,打开工具可以看见较浅蓝色代表free的内存,而深色的部分代表使用的内存从内存变换的走势图变换,可以判断关于内存的使用状态。
(2)LeakCanary工具:LeakCanary是Square公司基于MAT开发的一款监控Android内存泄漏的开源框架。其工作的原理是:监测机制利用了Java的WeakReference和ReferenceQueue,通过将Activity包装到WeakReference中,被WeakReference包装过的Activity对象如果被回收,该WeakReference引用会被放到ReferenceQueue中,通过监测ReferenceQueue里面的内容就能检查到Activity是否能够被回收(在ReferenceQueue中说明可以被回收,不存在泄漏;否则,可能存在泄漏。
(3)Android Lint 工具:Android Lint Tool 是Android Sutido集成的一个Android代码提示工具,它可以给你布局、代码提供非常强大的帮助。硬编码会提示级别警告。
(二)流畅——卡顿优化
卡顿的场景通常发生在用户交互体验中。影响卡顿的两大因素,分别是界面绘制和数据处理。界面绘制:主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在 UI 和启动后的初始界面以及跳转到页面的绘制上。数据处理:导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据在处理 UI 线程,二是数据处理占用 CPU 高,导致主线程拿不到时间片,三是内存增加导致 GC 频繁,从而引起卡顿。
(1)布局优化:在Android中系统对View进行测量、布局和绘制时,都是通过对View数的遍历来进行操作的。如果一个View数的高度太高就会严重影响测量、布局和绘制的速度。布局复用,使用标签重用layout;提高显示速度,使用延迟View加载;减少层级,使用标签替换复级布局;注意使用wrap_content,会增加measure计算成本;删除控件中无用属性;
(2)绘制优化:过度绘制是指在屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次重叠的 UI 结构中,如果不可见的 UI 也在做绘制的操作,就会导致某些像素区域被绘制了多次,从而浪费了多余的 CPU 以及 GPU 资源。
(3)启动优化:应用一般都有闪屏页SplashActivity,优化闪屏页的 UI 布局,可以通过 Profile GPU Rendering 检测丢帧情况。
(三)节省——耗电优化
在 Android5.0 以前,关于应用电量消耗的测试即麻烦又不准确,而5.0 之后Google专门引入了一个获取设备上电量消耗信息的API—— Battery Historian。Battery Historian 是一款由 Google 提供的 Android 系统电量分析工具,直观地展示出手机的电量消耗过程,通过输入电量分析文件,显示消耗情况。最后提供一些可供参考耗电优化的方法:
(1)计算优化。算法、for循环优化、Switch…case替代if…else、避开浮点运算。浮点运算比常规运算更复杂,因此计算机进行浮点运算速度要比进行常规运算慢得多。
(2)避免 Wake Lock 使用不当。Wake Lock是一种锁的机制,主要是相对系统的休眠而言的,,只要有人拿着这个锁,系统就无法进入休眠意思就是我的程序给CPU加了这个锁那系统就不会休眠了,这样做的目的是为了全力配合我们程序的运行。
(3)使用 Job Scheduler 管理后台任务。在Android 5.0 API 21 中,google提供了一个叫做JobScheduler API的组件,来处理当某个时间点或者当满足某个特定的条件时执行一个任务的场景,例如当用户在夜间休息时或设备接通电源适配器连接WiFi启动下载更新的任务。这样可以在减少资源消耗的同时提升应用的效率。
(四)安装包——APK瘦身
(1)安装包的组成结构assets文件夹。存放一些配置文件、资源文件,assets不会自动生成对应的 ID,而是通过 AssetManager 类的接口获取。
(2)减少安装包大小代码混淆。使用IDE 自带的 proGuard 代码混淆器工具 ,它包括压缩、优化、混淆等功能。资源优化。还有冷启动、热启动等很多性能优化方面的技巧,在这里就不展开赘述了。
针对“性能优化”这个要点,分享给大家一份《360°全方位Android性能优化解析》,这份学习手册将会带领大家一步一步深入探索Android的性能优化,让产品的性能从各个方面得到提升,希望大家喜欢。这份资料一共有721页,4个大点,25个小章节,不仅仅有详细的底层原理的解析,还有专门的实践案例!
第一章 设计思想与代码质量优化


1.六大原则
单一职责原则里氏替换原则依赖倒转原则接口隔离原则……

2.设计模式
结构型模式:桥接模式、适配器模式、装饰器模式、代理模式、门面(外观)模式……创建型模式:建造者模式、单例模式、抽象工厂模式、工厂方法模式……数据结构:数组、栈、队列、链表、树……算法:排序算法、查找算法……

image.png

第二章 程序性能优化


1.启动速度与执行效率优化
冷启动和热启动解析APP 启动黑白屏解决办法APP 卡顿问题分析及解决方案启动速度与执行效率优化之 StrictMode……

2.布局检测与优化
布局层级优化过度渲染……

3.内存优化
内存抖动和内存泄漏内存大户Bitmap 内存优化Profile 内存监测工具Mat 大对象与泄漏检测耗电优化网络传输与数据存储优化网络传输与数据存储优化APK 大小优化屏幕适配……

4.耗电优化
Doze&StandbyBattery HistorianJobSchedulerWorkManager

5.网络传输与数据存储优化
google 序列化工具 protobuf7z 极限压缩……

6.APK 大小优化
APK 瘦身微信资源混淆原理……

image.png

7.屏幕适配
进行适配的原理屏幕分辨率限定符与 smallestWidth 限定符适配原理为什么选择 smallestWidth 限定符适配怎么适配其他 module常见问题处理……

8.OOM 问题原理解析
adj 内存管理机制JVM 内存回收机制与 GC 算法解析生命周期相关问题总结Bitmap 压缩方案总结……

9.ANR 问题解析
AMS 系统时间调节原理程序等待原理分析ANR 问题解决方案……

10.Crash 监控方案
Java 层监控方案Nativie 层监控方案……

image.png

第三章 开发效率优化


1.分布式版本控制系统 Git
企业高效持续集成平台场景介绍GIT 分布式版本控制系统GIT 分支管理……

2.自动化构建系统 Gradle:
Gradle 与 Android 插件:gradle 与 android gradle 插件的关系、Gradle Transform API 的基本使用……Gradle Transform API 的基本使用:什么是 Transform、Transform 的使用场景、Transform API 学习、输入的类型……自定义插件开发:Gradle 插件简介、开始准备、实践、自定义 Gradle 插件、buildSrc 模块方式……插件实战:多渠道打包、发版自动钉钉……

image.png

第四章 APP 性能优化实践


1.启动速度
应用启动的一般流程冷启动和热启动启动速度的测量启动窗口优化线程优化系统调度优化GC 优化IO 优化资源重排主页布局优化类加载优化选择合适的启动框架减少 Activity 的跳转层次厂商优化后台保活……

image.png

2.流畅度
性能问题分析的一些工具和套路通过性能数据数据分析Android 平台性能导致的性能案例Android App 自身导致的性能问题低内存的数据特征和行为特征应用宝讯飞输入法无障碍服务导致的整机卡顿分析字节跳动:今日头条图文详情页秒开实践……

3.抖音在 APK 包大小资源优化的实践
图片压缩webp 无侵入式兼容多 DPI 优化重复资源合并shrinkResource 严格模式资源混淆(兼容 aab 模式)ARSC 瘦身……

image.png

4.优酷响应式布局技术全解析
优酷APP响应式布局技术概述优酷APP响应式布局Android落地在分发场景的落地在消费场景的落地优酷APP响应式布局之测试方案……

5.网络优化
手机淘宝在网络的链路优化百度 APP 在网络深度优化的实践……

6.手机淘宝双十一性能优化项目揭秘
一秒法则的实现启动时间和页面帧率提升 20%Android 手机内存节省50%……

7.高德 APP 全链路源码依赖分析
高德 APP 平台架构基础实现原理项目架构应用场景及实现原理……

8.彻底干掉OOM的实战经验分享
排查内存泄漏兜底策略内存峰值太高特大图排查优化……

9.微信 Android终端内存优化实践
Activity 泄露检测Bitmap 分配及回收追踪Native 内存泄漏检测线程监控内存监控……

image.png

总结
性能优化不是更新一两个版本就可以解决的,是持续性的需求,持续集成迭代反馈。在实际的项目中,在项目刚开始的时候,由于人力和项目完成时间限制,性能优化的优先级比较低,等进入项目投入使用阶段,就需要把优先级提高,但在项目初期,在设计架构方案时,性能优化的点也需要提早考虑进去,这就体现出一个程序员的技术功底了。

给大家说了这么多,希望大家可以早日用这份《360°全方位Android性能优化解析》来提升自的性能优化内功,向高级工程师更进一步!
页: [1]
查看完整版本: 5G时代,App最重要的竞争力应该是什么?