前言
- 在
Android
- 开发中,性能优化策略十分重要
- 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键
- 本文全面讲解性能优化中的所有知识,献上一份
Android
- 性能优化的详细攻略, 含:优化方向、原因 & 具体优化方案,希望你们会喜欢
文章较长,建议预留较长时间阅读 / 收藏
目录
示意图
1. 性能优化的目的
性能优化的目的是为了让应用程序App
更快、更稳定 & 更省。具体介绍如下:
- 更快:应用程序 运行得更加流畅、不卡顿,能快速响应用户操作
- 更稳定:应用程序 能 稳定运行 & 解决用户需求,在用户使用过程中不出现应用程序崩溃
(Crash)
- 和 无响应
(ANR)
- 的问题
- 更省:节省耗费的资源,包括 内存占有、电池量、网络资源等
2. 需优化的性能指标
针对上述目的,需优化的性能指标 含:流畅性、稳定性、资源节省性
3. 优化方向
- 针对上述性能指标,本文主要讲解的优化方向如下:
示意图
- 下面,我将针对每一种性能指标,详细讲解其优化方案
4. 流畅性
- 优化原因
利于 减少使用中的卡顿、响应时间久等问题,给与用户一个操作流畅的体验 - 优化方向
主要针对3个方面优化:启动速度、页面显示速度、响应速度
4.1 启动速度
- 优化原因(即 启动速度慢的原因)
初次打开应用时,需加载很多资源 or 功能逻辑 - 优化方案
采用 异步加载(多线程)、分步加载、延期加载的策略,减少启动应用时加载的任务,从而提高启动速度
由于我们打开的页面大多是Activity,下面将给出加速启动Activity的方式
示意图
4.2 页面显示速度
- 优化原因(即 页面显示速度慢的原因)
a. 页面需绘制的内容(布局 & 控件)太多,从而导致页面测量时间过长
b. 绘制效率过低,从而导致绘制时间过长 - 优化方案 布局优化 & 绘制优化。具体请看文章:
- Android性能优化:手把手带你全面了解 绘制优化
- Android性能优化:布局优化 详细解析(含<include>、<ViewStub>、<merge>讲解 )
4.3 响应速度
- 优化原因
应用程序出现
ANR
关于ANR的简介如下
示意图
- 优化方案
使用多线程,将大量 & 耗时操作放在工作线程中执行
- 多线程的方式 包括:
AsyncTask
- 、继承
Thread
- 类、实现
Runnable
- 接口、
Handler
- 消息机制、
HandlerThread
- 等
- 注:实际开发中,当一个进程发生了
ANR
- 后,系统会在
/data/anr
- 目录下创建一个文件
traces.txt
- ,通过分析该文件可定位出
ANR
- 的原因
4.4 其他优化方案
- 合理的刷新机制
示意图 - 动画的使用
- 根据不同场景选择 合适的动画框架
- 使用 硬件加速的方式 提高流畅度
- 使用动画后需停止动画
4.5 总结
下面,总结 关于流畅性的性能优化方案
示意图
5. 稳定性
- 影响
Android
- 应用稳定性的原因有很多,主要是:应用崩溃
(Crash)
- 、应用无响应
(ANR)
这2个错误的结果将导致程序无法使用
- 下面,将主要讲解该2个优化方向:应用崩溃
(Crash)
- 、应用无响应
(ANR)
5.1 应用无响应(ANR)
- 简介
示意图
- 优化原理
尽量避免应用程序出现ANR
- 优化方案
使用多线程,将大量 & 耗时操作放在工作线程中执行
- 多线程的方式 包括:
AsyncTask
- 、继承
Thread
- 类、实现
Runnable
- 接口、
Handler
- 消息机制、
HandlerThread
- 等
- 关于多线程的使用,可看我写的关于多线程的文集:多线程系列
- 注:实际开发中,当一个进程发生了
ANR
- 后,系统会在
/data/anr
- 目录下创建一个文件
traces.txt
- ,通过分析该文件可定位出
ANR
- 的原因
5.2 应用崩溃(Crash)
- 优化原理
应用崩溃
Crash
- 很多情况是因为 内存溢出,即
OOM
- ;故 需避免出现
OOM
- 现象
内存溢出 简介:
示意图
- 优化方案
关于内存优化,具体请看文章:Android性能优化:这是一份全面&详细的内存优化指南
5.3 总结
下面,总结 关于稳定性的性能优化方案
示意图
6. 资源节省性
- 优化原因 由于移动设备的硬件性能有限,故减少应用程序的资源消耗显得十分重要
- 优化方向 内存大小、安装包大小、耗电量 & 网络流量
6.1 内存优化
- 优化原因
避免因不正确使用内存 & 缺乏管理,从而出现 内存泄露(ML)
、内存溢出(OOM)
、内存空间占用过大 等问题,最终导致应用程序崩溃(Crash
) - 优化方向 常见的内存问题如下
- 内存泄露
- 内存抖动
- 图片
Bitmap
- 相关
- 代码质量 & 数量
- 日常不正确使用
- 具体优化方案 下面,我将详细分析每项的内存问题 & 给出优化方案。具体请看文章:
- Android性能优化:这是一份全面&详细的内存优化指南
- Android性能优化:手把手带你全面了解 内存泄露 & 解决方案
6.2 减少安装包大小
- 优化原因
应用程序的安装包大小虽对应用程序的使用无影响,但影响的是:
- 空间占有率:即 应用程序占有手机内存的大小
- 下载门槛:应用的安装包越大,用户下载的门槛越高
特别在移动网络下,用户下载应用时,对安装包大小的要求更高,因此减小安装包大小可让更多用户愿意下载 & 使用产品
- 安装包结构 介绍
示意图
- 优化方案
示意图
6.3 减少网络流量
- 优化原因 每次获取资源时 都通过流量 & 网络加载的方式,将耗费大量网络流量
- 优化方案
主要通过 缓存
具体描述:当加载资源时,先从内存缓存中寻找;若内存缓存中没有,则从文件缓存中寻找;若文件缓存中没有,最终再通过流量从网络中加载获取
- 具体应用
Android:手把手教你构建 WebView 的缓存机制 & 资源预加载方案
6.4 减少应用的耗电量
- 优化原因
随着智能手机普及 & 应用程序
App
- 的功能发展,人们的日常生活都离不开智能手机 & 各式各样的应用程序
App
- ,故 应用程序的耗电量指标则显得十分重要
具体优化方案如下:
示意图
6.5 总结
下面,总结 关于资源节省性的性能优化方案
示意图
7. 总结
- 区别于 功能性开发需求的短期性,性能优化是贯穿整个应用程序
App
- 项目的持续性需求;虽项目一开始时,性能优化的优先级较低,但当应用程序
App
- 的用户体量达到一定规模时,性能优化 则非常重要
- 本文全面总结了
Android
- 开发中的性能优化 所有知识,含:优化方向、原因 & 具体优化方案,下面用2张图总结:
性能优化概述
示意图