Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)...
2019独角兽企业重金招聘Python工程师标准>>>
前言
- 在
Android
开发中,性能优化策略十分重要 - 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键
- 本文全面讲解性能优化中的所有知识,献上一份
Android
性能优化的详细攻略, 含:优化方向、原因 & 具体优化方案,希望你们会喜欢
文章较长,建议预留较长时间阅读 / 收藏
目录
1. 性能优化的目的
性能优化的目的是为了让应用程序App
更快、更稳定 & 更省。具体介绍如下:
- 更快:应用程序 运行得更加流畅、不卡顿,能快速响应用户操作
- 更稳定:应用程序 能 稳定运行 & 解决用户需求,在用户使用过程中不出现应用程序崩溃
(Crash)
和 无响应(ANR)
的问题 - 更省:节省耗费的资源,包括 内存占有、电池量、网络资源等
2. 需优化的性能指标
针对上述目的,需优化的性能指标 含:流畅性、稳定性、资源节省性
3. 优化方向
- 针对上述性能指标,本文主要讲解的优化方向如下:
- 下面,我将针对每一种性能指标,详细讲解其优化方案
4. 流畅性
- 优化原因 利于 减少使用中的卡顿、响应时间久等问题,给与用户一个操作流畅的体验
- 优化方向 主要针对3个方面优化:启动速度、页面显示速度、响应速度
4.1 启动速度
- 优化原因(即 启动速度慢的原因) 初次打开应用时,需加载很多资源 or 功能逻辑
- 优化方案 采用 异步加载(多线程)、分步加载、延期加载的策略,减少启动应用时加载的任务,从而提高启动速度
由于我们打开的页面大多是
Activity
,下面将给出加速启动Activity
的方式
4.2 页面显示速度
优化原因(即 页面显示速度慢的原因) a. 页面需绘制的内容(布局 & 控件)太多,从而导致页面测量时间过长 b. 绘制效率过低,从而导致绘制时间过长
优化方案 布局优化 & 绘制优化。具体请看文章:
- Android性能优化:手把手带你全面了解 绘制优化
- Android性能优化:布局优化 详细解析(含、、讲解 )
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
现象
内存溢出 简介:
5.3 总结
下面,总结 关于稳定性的性能优化方案
6. 资源节省性
优化原因 由于移动设备的硬件性能有限,故减少应用程序的资源消耗显得十分重要
优化方向 内存大小、安装包大小、耗电量 & 网络流量
6.1 内存优化
优化原因 避免因不正确使用内存 & 缺乏管理,从而出现 内存泄露
(ML)
、内存溢出(OOM)
、内存空间占用过大 等问题,最终导致应用程序崩溃(Crash
)优化方向 常见的内存问题如下
- 内存泄露
- 内存抖动
- 图片
Bitmap
相关 - 代码质量 & 数量
- 日常不正确使用
6.2 减少安装包大小
- 优化原因 应用程序的安装包大小虽对应用程序的使用无影响,但影响的是:
- 空间占有率:即 应用程序占有手机内存的大小
- 下载门槛:应用的安装包越大,用户下载的门槛越高
特别在移动网络下,用户下载应用时,对安装包大小的要求更高,因此减小安装包大小可让更多用户愿意下载 & 使用产品
- 安装包结构 介绍
- 优化方案
6.3 减少网络流量
优化原因 每次获取资源时 都通过流量 & 网络加载的方式,将耗费大量网络流量
优化方案 主要通过 缓存 减少网络流量,采用三级缓存方案:即 内存缓存 - 硬盘缓存- 数据库- 文件 - 网络缓存
具体描述:当加载资源时,先从内存缓存中寻找;若内存缓存中没有,则从文件缓存中寻找;若文件缓存中没有,最终再通过流量从网络中加载获取
6.4 减少应用的耗电量
- 优化原因 随着智能手机普及 & 应用程序
App
的功能发展,人们的日常生活都离不开智能手机 & 各式各样的应用程序App
,故 应用程序的耗电量指标则显得十分重要
具体优化方案如下:
6.5 总结
下面,总结 关于资源节省性的性能优化方案
7. 总结
- 区别于 功能性开发需求的短期性,性能优化是贯穿整个应用程序
App
项目的持续性需求;虽项目一开始时,性能优化的优先级较低,但当应用程序App
的用户体量达到一定规模时,性能优化 则非常重要 - 本文全面总结了
Android
开发中的性能优化 所有知识,含:优化方向、原因 & 具体优化方案,下面用2张图总结:
最后给大家分享一份非常系统和全面的Android进阶技术大纲及进阶资料,及面试题集
想学习更多Android知识,请加入Android技术开发交流 7520 16839
进群与大牛们一起讨论,还可获取Android高级架构资料、源码、笔记、视频
包括 高级UI、Gradle、RxJava、小程序、Hybrid、移动架构、React Native、性能优化等全面的Android高级实践技术讲解性能优化架构思维导图,和BATJ面试题及答案!
群里免费分享给有需要的朋友,希望能够帮助一些在这个行业发展迷茫的,或者想系统深入提升以及困于瓶颈的朋友,在网上博客论坛等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我在这免费分享一些架构资料及给大家。希望在这些资料中都有你需要的内容。
Android高级技术大纲,以及系统进阶视频,及面试题和答案
面试题及答案
Android高级技术大纲
Android 进阶视频资料
转载于:https://my.oschina.net/u/3956562/blog/3015670
Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)...相关推荐
- android包内存放视频,Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)...
为其决定了应用程序的开发质量:可用性.流畅性.稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 Android性能优化的详细攻略, 含:优化方向.原因 & 具体优化 ...
- 优化| 手把手教你学会杉树求解器(COPT)的安装、配置与测试
优化| 手把手教你学会杉数求解器COPT的安装.配置与测试 前言 线性规划(LP)测试榜单--单纯形法: Benchmark of Simplex LP solvers 线性规划(LP)测试榜单--内 ...
- Android 开发之手把手教你写 ButterKnife 框架(三)
系列文章目录导读: Android开发之手把手教你写ButterKnife框架(一) Android开发之手把手教你写ButterKnife框架(二) Android开发之手把手教你写ButterKn ...
- Android实战:手把手实现“捧腹网”APP(二)-----捧腹APP原型设计、实现框架选取...
Android实战:手把手实现"捧腹网"APP(一)-–捧腹网网页分析.数据获取 Android实战:手把手实现"捧腹网"APP(二)-–捧腹APP原型设计.实 ...
- Android常用:手把手教你实现搜索框(含历史搜索记录)
http://blog.csdn.net/carson_ho/article/details/53366570 前言 像下图的搜索功能在Android开发中非常常见 今天我将手把手教大家如何实现具备历 ...
- android手机号码恢复,手把手教你如何恢复安卓手机通讯录里面丢失的数据
原标题:手把手教你如何恢复安卓手机通讯录里面丢失的数据 虽然现在的智能手机有非常多的功能,但是通话仍然是手机里面最为重要也最为常用的功能,通讯录也是十分重要的,他存放着我们手机内所有联系人的手机号.那 ...
- 超越Swin Transformer!谷歌提出了收敛更快、鲁棒性更强、性能更强的NesT
[导读]谷歌&罗格斯大学的研究员对ViT领域的分层结构设计进行了反思与探索,提出了一种简单的结构NesT,方法凭借68M参数取得了超越Swin Transformer的性能. 文章链接:htt ...
- Android进阶:手把手教你5G时代Webview的正确使用姿势,完整PDF
前言 新鲜面筋出炉了! 一直都挺喜欢京东这家公司的,于是一边复习,一边看京东的招聘信息. 我是在7月25日投递的简历,投出去后等了三天,一直没有收到回音.本来以为已经石沉大海了的,没想到三天后收到了信 ...
- android 关联mp3,手把手教你Android如何使用NDK实现一个MP3转码库
通过本文你可以学到以下知识:如何实现一个Android MP3转码库 一些和音频转码相关的基础知识 如何使用NDK将c/c++项目移植到Android端,并使用Java调用c/c++代码 如何使用CM ...
最新文章
- 卡尔曼滤波— Constant Velocity Model
- 【视频课】言有三每天答疑,38课深度学习+超60小时分类检测分割数据算法+超15个Pytorch框架使用与实践案例助你攻略CV...
- 【机器学习】数据挖掘算法——关联规则(一),相关概念,评价指标
- IE浏览器—自定义地址协议详解(非转载)
- 缓存穿透,缓存击穿,缓存雪崩以及解决方案
- 笔记:算法笔记-胡凡、曾磊
- SMAIL 语法大全(Dalvik 虚拟机操作码)
- MySQL功能大全(细品)
- 7474触发器 异步三进制加法计数器
- 计算机在摄影应用,计算机X线摄影在临床中的应用
- excel与access结合运用_access和excel结合应用
- 编程萌新必看!初学C语言必会的知识点,你学废了吗?
- Java:实现将方阵中的元素顺时针旋转90度算法(附完整源码)
- 用photoshop拼接一个七巧板图案
- Slasher Flick
- matlab 生成色带和彩色图像
- python运行时不显示cmd命令窗口的方法
- 【视频课】深度学习最有价值的CV领域,30小时掌握目标检测(附作者经历分享)!...
- 长沙北大青鸟java 学费_长沙北大青鸟学校好不好 长沙北大青鸟实力学费一览表:Java代码编写规范(二)...
- C#动态调用web服务 远程调用技术WebService
热门文章
- 定时任务重启后执行策略_quartz定时任务框架调度机制解析
- 研究人员探索gaze fixation对基于运动想象的脑机接口性能的影响
- CMU贺斌教授团队提出FAST-IRES技术,利用高密度EEG产生脑信号源的动态图像
- 3D神经接口系统可以感知和操纵“微型脑“
- 迁移学习中的负迁移:综述
- 用上强化学习和博弈论,EA开发的测试AI成精了
- 量子信息之父辞世,开山论文写完14年才被发表,晚年去当建筑工人
- 清华类脑计算成果再登Nature:张悠慧施路平团队出品,有望打破冯诺依曼瓶颈...
- 索尼发布全球首款内置AI传感器,1200万像素,660元起售
- 全球最大AI商业展会开幕,这家老牌巨头担当中国唯一代表