刚进公司就把祖传代码优化了,让公司的APP稳定性提高一半,大幅提升了用户体验是什么体验?
一个字!爽!
这不比斗破里面萧炎“三年之期”打脸嫣然来的爽?不比博人传燃?爽文小说都不敢这么写。
关键,没人信啊。
扮猪吃老虎的大佬
去年金三银四帮公司面试的时候认识了一个挺有意思的朋友,他是专科学历,非专业出身的Android程序员。
进公司后,这个小伙子上手很快。来的第三个月,他对我们公司的那堆祖传代码做了一些小小的优化,让公司的APP稳定性提高一半,大幅提升了用户体验。一鸣惊人,得到了领导的表扬还有我们技术组的一致好评,直接免考核转正了。
平时不声不响的,原来搁这儿憋大招呢,就说牛不牛掰!!!同批进来的其他人自然不服,觉得这就是靠运气,他上他也行。
性能优化的地位
Android和iOS都用过的朋友应该体验比较明显:相比于iOS,Android用的时间越长就会越卡。
在这个网络都追求5G的时代,“卡”这个体验显然成为了一个极其拉低印象分的问题。
所以,在 Android开发中,性能优化策略十分重要,他决定了应用程序的开发质量,包括可用性、流畅性、稳定性等,是提高用户留存率的关键。
所以,不只是阿里,还有腾讯、字节跳动、爱奇艺等,都非常重视这个问题,在面试中,如果这个方向表现优异,你将会很值钱。这也是那个小伙子得以免考核转正的主要原因。
其实我司的产品上线前不是没有经过测试,我们也会使用业界的主流工具,比如 Android Studio Profiler、LeakCanary、Memory Analyzer (MAT)、Systrace等工具进行检测,但是这些工具会存在以下问题:
-
线下场景能跑到的场景有限,很难把所有用户场景穷尽,但是应用上线后常因为线下无法复现、用户提供线索不足等原因不了了之;
-
Android 端的 内存快照HPORF 的获取依赖原生的 Debug.dumpHporf,dump 过程会挂起主线程导致明显卡顿,线下使用体验较差,影响采样数据。
-
无论是Systrace还是LeakCanary 在使用时,都会导致程序“变卡”,分析过程也会影响进程内存占用,导致分析数据出现偏差,甚至影响其他的性能指标;
-
内存分析工具分析结果较为单一,仅仅只能分析出 Fragment、Activity 内存泄露,像大对象、过多小对象问题导致的内存 OOM 无法分析。
性能问题如何治理?
正是由于上述一些弊端,使用这些线下工具只能解决一些明显的、常见的问题,然而应用上线之后的环境是无比复杂的。
首先,搞客户端开发的同学应该都知道,解决卡顿的过程往往是曲折的,有些并没有我们想的那样简单、浅表。很多时候,大部分卡顿是很难及时发现的,不可重现的卡顿,经常出现在线上用户的真实使用过程中,这种卡顿往往跟机器性能,手机环境,甚至是操作偏好等因素息息相关。
我们平时从用户反馈的“好卡呀”这种描述中很难直接洞察到卡顿的根源。甚至有些连卡顿的场景都不知道,很难准确重现,所以这种卡顿容易让人摸不着头脑。
而内存作为计算机程序运行最重要的资源之一,需要运行过程中做到合理的资源分配与回收,不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏,重则导致用户应用程序发生 OOM(out of memory)崩溃。
我们需要在各种机器资源上保持优秀的流畅性和稳定性,内存优化是必须要重视的环节。但是我们即使有接入如Bugly的线上异常采集平台,也不能够保证通过异常日志找到OOM的原因。绝大多数的OOM,异常日志显示的只是压倒骆驼的最后一根稻草,而不是直接的原因。
如下图:
错误发生在 b.xf 第五行,导致OOM的原因,到底是此处申请了太大的内存,还是其他地方申请了太多内存导致可用内存不足亦或者程序存在内存抖动问题,导致连续内存不足,我们不得而知。
这时候APM(Application Performance Monitor ,应用性能监控)的重要性就体现出来了。如果我们能够对应用上线后的各项性能进行监控,在出现问题时能提取监控数据,从而定位到存在性能问题的地方快速解决,这不香吗?
如何进行线上性能监控,有效进行性能优化?
本文针对“性能优化”这个要点,献上一份 Android性能优化的详细攻略,从各个方面对目标产品进行全方位的“优化”,让产品的性能从各个方面得到提升,希望大家喜欢。
希望想补习线上性能监控提高APP调优内功,跳槽进大厂的朋友好好学习,抓紧时间提升!
我相信,只要大家认真钻研完这份资料,跟着走一遍,你就有勇气在简历上写下熟悉Android线上性能监控,精通APP性能调优与项目实战这些点。从此吊打所有向你提问线上性能监控的面试官,成为一个名副其实的面霸!
App性能优化要点大纲
这份《超全App性能优化知识技能手册》一共有721页,4个大点,25个小章节,不仅仅有详细的底层原理的解析,还有专门的实践案例
有需要的朋友,直接戳此处蓝色字体即可跳转免费领取通道!
(另外还有一个系列配套的性能优化专题的讲解视频需要的可以一起打包)
第一章 设计思想与代码质量优化
- 六大原则
单一职责原则
里氏替换原则
依赖倒转原则
接口隔离原则
…… - 设计模式:结构型模式
桥接模式
适配器模式
装饰器模式
代理模式
门面(外观)模式
…… - 创建型模式
建造者模式
单例模式
抽象工厂模式
工厂方法模式
…… - 数据结构
数组
栈
队列
链表
树
…… - 算法
排序算法
查找算法
……
第二章 程序性能优化
-
启动速度与执行效率优化
冷启动和热启动解析
APP 启动黑白屏解决办法
APP 卡顿问题分析及解决方案
启动速度与执行效率优化之 StrictMode
…… -
布局检测与优化
布局层级优化
过度渲染
…… -
内存优化
内存抖动和内存泄漏
内存大户
Bitmap 内存优化
Profile 内存监测工具
Mat 大对象与泄漏检测
耗电优化
网络传输与数据存储优化网络传输与数据存储优化
APK 大小优化
屏幕适配
…… -
耗电优化
Doze&Standby
Battery Historian
JobScheduler
WorkManage -
网络传输与数据存储优化
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 内存泄漏检测
线程监控
内存监控
……
总结
如果你也想提升自己移动开发的性能优化技术,或者是正在准备移动开发岗的面试,我觉得这份笔记你必定不能错过。
有需要的朋友,直接戳此处蓝色字体即可跳转免费领取通道!
转载:https://blog.csdn.net/BUGgogogo/article/details/115909611