一、性能优化的地位
用过Android和iOS的朋友应该印象比较深,相比于iOS,Android用的时间越长就会越卡。
在这个网络都追求5G了的时代,“卡”这个体验显然成为了一个极拉低印象分的问题,所以,不只是阿里,还有腾讯、字节跳动、爱奇艺等,都非常重视这个问题,在面试中,如果这个方向表现优异,你将会很值钱。
本文针对“性能优化”这个要点,从各个方面对目标产品进行全方位的“优化”,让产品的性能从各个方面得到提升。
二、App性能优化提要
背景&目的
- 用户体验
- 业务转化
- 降低成本
领域
- 包体积
- 电量
- 页面打开速度
- 图片
- 流畅度
技能
基础知识
-
计算机基础
-
网络基础
- dns
- tcp
- ssl
- http
- cdn
-
java虚拟机
- 运行机制
- 内存/gc
- 线程
- classloader
-
Android原理
-
GUI绘制原理
-
运行原理
- 事件循环
- 启动原理
- IPC调用
-
apk产物构建原理
-
富媒体编解码
-
-
其他
- java混淆
工具
-
android profiler
- Networking Traffic Tool
- Memory Monitor
- Allocation Tracker
- Heap Tool
- traceview
-
android device monitor
- Systrace
- HierarchyViewer
- Thread dump
-
android手机端
- GPU过度绘制
- GPU呈现模式分析
- 显示GPU视图更新
- 严格模式
-
电量分析工具
- WakeLock Dector
- Battery History Tool
-
内存分析工具
- MAT\GIMP
- LeakCanary
- Wrap Shell
-
adb常用命令
-
Lint
-
Trepn Profiler
数据
采集
- firebase
- BlockCanary
- LeakCanary
呈现
- Play/Firebase 后台
- 微信Matrix
常用策略
网络
-
访问速度
- httpdns
- spdy/http2
- quic/http3
- tls1.3/slightSSL
- 就近访问CDN
- 分片传输
-
内容体积
- gzip
- json -> pb
- 图片格式、裁剪、质量
-
减少网络访问
- 缓存
- 访问频率
- 削峰、限流
内存
-
内存分配
- 合适大小图片
- 去掉alpha通道
- 使用流技术处理大对象
-
回收策略
- RecyclerView
- 避免内存泄漏
- 避免频繁创建对象
- 对象池
GPU
-
重复绘制
- 背景优化
- 自定义UI
-
减少层级
- ContraintLayout
- 善用merge
-
缩小刷新范围
IO
-
数据库
- sql优化
- 访问内容最小
- 索引
-
sp体积
-
内存缓存
电池
-
降低屏幕消耗
- 避免唤醒
- 降低屏幕亮度
- 避免长时间亮屏
-
减少CPU使用
CPU
-
算法优化
- 编解码优化
- 逻辑优化
- 避免死循环
- 缓存计算结果
-
善用多核
- rx
- stream api
-
耗时操作异步
- 网络
- IO
- 密集计算任务
包体积
-
架构升级
- App Bundle
- Dynamic Feature
-
减少资源
- R文件
- 无用资源
- 无用代码/sdk
-
降低资源占用
- zip高压缩比
- 图片合理大小
- 图片转xml
- so动态下发
- tinyPng
- 代码混淆、资源混淆
三、性能优化知识技能策略详解
性能优化这个点的知识要想讲明白篇幅会比较长,鉴于篇幅原因,我这里直接把详解部分整理成了一份PDF。
这份《超全App性能优化知识技能手册》一共有721页,4个大点,25个小章节,不仅仅有详细的底层原理的解析,还有专门的实践案例
有需要的朋友,直接戳此处蓝色字体即可跳转免费领取通道!
(另外还有一个系列配套的性能优化专题的讲解视频需要的可以一起打包)
第一章 设计思想与代码质量优化
- 六大原则(单一职责原则、里氏替换原则、依赖倒转原则、接口隔离原则……)
- 设计模式:结构型模式(桥接模式、适配器模式、装饰器模式、代理模式、门面(外观)模式……),创建型模式(建造者模式、单例模式、抽象工厂模式、工厂方法模式……)
- 数据结构(数组、栈、队列、链表、树……)
- 算法(排序算法、查找算法……)
第二章 程序性能优化
- 启动速度与执行效率优化(冷启动和热启动解析、APP 启动黑白屏解决办法、APP 卡顿问题分析及解决方案、启动速度与执行效率优化之 StrictMode……)
- 布局检测与优化(布局层级优化、过度渲染……)
- 内存优化(内存抖动和内存泄漏、内存大户,Bitmap 内存优化、Profile 内存监测工具、Mat 大对象与泄漏检测、耗电优化、网络传输与数据存储优化网络传输与数据存储优化、APK 大小优化、屏幕适配……)
- 耗电优化(Doze&Standby、Battery Historian、JobScheduler、WorkManager、)
- 网络传输与数据存储优化(google 序列化工具 protobuf、7z 极限压缩……)
- APK 大小优化(APK 瘦身、微信资源混淆原理……)
- 屏幕适配(进行适配的原理、屏幕分辨率限定符与 smallestWidth 限定符适配原理、为什么选择 smallestWidth 限定符适配、怎么适配其他 module、常见问题处理……)
- OOM 问题原理解析(adj 内存管理机制、JVM 内存回收机制与 GC 算法解析、生命周期相关问题总结、Bitmap 压缩方案总结……)
- ANR 问题解析(AMS 系统时间调节原理、程序等待原理分析、ANR 问题解决方案……)
- Crash 监控方案(Java 层监控方案、Nativie 层监控方案……)
第三章 开发效率优化
- 分布式版本控制系统 Git(企业高效持续集成平台场景介绍、GIT 分布式版本控制系统、GIT 分支管理……)
- 自动化构建系统 Gradle:
Gradle 与 Android 插件(gradle 与 android gradle 插件的关系、Gradle Transform API 的基本使用……),
Gradle Transform API 的基本使用(什么是 Transform、Transform 的使用场景、Transform API 学习、输入的类型……)
自定义插件开发(Gradle 插件简介、开始准备、实践、自定义 Gradle 插件、buildSrc 模块方式……)
插件实战(多渠道打包、发版自动钉钉……)
第四章 APP 性能优化实践
- 启动速度(应用启动的一般流程、冷启动和热启动、启动速度的测量、启动窗口优化、线程优化、系统调度优化、GC 优化、IO 优化、资源重排、主页布局优化、类加载优化、选择合适的启动框架、减少 Activity 的跳转层次、厂商优化、后台保活……)
- 流畅度(性能问题分析的一些工具和套路、通过性能数据数据分析、Android 平台性能导致的性能案例、Android App 自身导致的性能问题、低内存的数据特征和行为特征、应用宝、讯飞输入法无障碍服务导致的整机卡顿分析、字节跳动:今日头条图文详情页秒开实践……)
- 抖音在 APK 包大小资源优化的实践(图片压缩、webp 无侵入式兼容、多 DPI 优化、重复资源合并、shrinkResource 严格模式、资源混淆(兼容 aab 模式)、ARSC 瘦身……)
- 优酷响应式布局技术全解析(优酷APP响应式布局技术概述、优酷APP响应式布局Android落地、在分发场景的落地、在消费场景的落地、优酷APP响应式布局之测试方案……)
- 网络优化(手机淘宝在网络的链路优化、百度 APP 在网络深度优化的实践……)
- 手机淘宝双十一性能优化项目揭秘(一秒法则的实现、启动时间和页面帧率提升 20%、Android 手机内存节省50%……)
- 高德 APP 全链路源码依赖分析(高德 APP 平台架构、基础实现原理、项目架构、应用场景及实现原理……)
- 彻底干掉OOM的实战经验分享(排查内存泄漏、兜底策略、内存峰值太高、特大图排查优化……)
- 微信 Android终端内存优化实践(Activity 泄露检测、Bitmap 分配及回收追踪、Native 内存泄漏检测、线程监控、内存监控……)
总结
如果你也想提升自己移动开发的性能优化技术,或者是正在准备移动开发岗的面试,我觉得这份笔记你必定不能错过。
有需要的朋友,直接戳此处蓝色字体即可跳转免费领取通道!