Android应用性能优化最佳实践导读

简介:
前  言
为什么写这本书
一个好的应用,除了要有吸引人的功能和交互之外,在性能上也应该有高的要求,即使应用非常具有特色,或者功能和业务具有唯一性,在产品前期可能吸引了部分用户,但用户体验不好的话,也会给产品带来很差的口碑,如果有在体验上更好的竞品,用户也会很快转移。那么一个好的应用应该如何定义呢?主要有三方面:
业务/功能
符合逻辑的交互
优秀的性能
众所周知,Android系统作为以移动设备为主的一款操作系统,硬件配置有一定的限制,虽然配置现在越来越高级,但仍然无法和PC相比,在CPU和内存上的使用不合理或者耗费资源多时,就会碰到内存不足导致的稳定性问题、CPU消耗太多导致的卡顿问题等。例如,我们发布一款产品后会收到很多的反馈,这些反馈来自很多渠道,有用户反馈,有应用发布平台的反馈通道等。
面对这些问题时,大家想到的都是联系用户,然后看日志,特别是有关性能类问题的反馈,原因也非常难找,日志大多用处不大,为什么呢?因为性能问题大部分是非必现的问题,定位时很难复现,而又没有关键的日志,当然就无法找到原因了。这些问题非常影响用户的体验和功能的使用,所以解决这些问题是非常重要的。当前市场上讲解性能优化的书太少,即使有些书讲到,很多也是一笔带过,没有深入分析和寻找解决方案,所以有必要用一本书来从多个维度讲解在性能上我们面临了什么问题,如何解决这些问题,并在实际的项目中来优化我们的应用,以提高用户体验。
本书面向的读者
本书适合所有Android应用开发从业人员及在校学生,特别是有一定Android应用开发经验的开发人员,高级开发人员也可以通过本书了解更多的性能调优知识。
本书特色
本书为进阶类图书,对于一些基础技术和基础理论知识不会做过多的阐述,特别是入门类的知识点,大家可以从其他书籍获取相关的知识。书中以性能优化为核心,深入剖析性能优化具体涉及的技术背景与优化方案,同时提供典型案例,帮助读者更深入地掌握Android应用开发技术,理解Android的运行机制和原理,掌握Android性能优化的思想,让开发者快速成长,打造高质量的Android应用。
本书的主要内容
可以把用户能体验到的性能问题主要总结为4个类别:
流畅
稳定
省电
省流量
性能问题的主要原因是什么,原因有相同的,也有不同的,但归根结底,不外乎内存使用、代码效率、合适的策略逻辑、代码质量这一类问题。本书讲解内容的目标和方向如下图所示。

从上图可以看到,打造一个高质量的应用应该以4个方向为目标:快、稳、省、小。
快:使用时避免出现卡顿,响应速度快,减少用户的等待时间,满足用户预期。
稳:降低crash率和ANR率,不要在用户使用过程中崩溃和无响应。
省:节省流量和耗电,减小用户使用成本,避免使用时导致手机发烫。
小:安装包小可以降低用户的安装成本。
这4类问题需要从根源上解决,也就是要解决图中第二个框里的问题:卡顿、内存使用不合理、代码质量差、代码逻辑不优秀、安装包过大。这些问题也是在开发过程中碰到最多的问题,在实现业务需求的同时,也需要考虑到这些点,多花时间去思考,避免功能完成后再来做优化和修复Bug,这个时候带来的成本会增加。如果是维护之前的代码,就需要使用一系列工具来发现问题点。
性能优化不是更新一两个版本可以解决的,是持续性的需求,结合到实际中,在一个新产品/项目开始时,由于人力和上线时间的限制,可以把优先级放低,但有些点是在写代码时就要考虑的,这就体现出程序员的技术功底。
本书强调性能调优的核心思想和方向如下:
发现问题→分析问题原因及背景→寻找最优解决方案→解决问题。
本书一共7章,在简单介绍了Android Studio的使用指南后,分别从绘制(UI)、内存、存储、稳定性、耗电以及安装包6个方面进行优化,从系统上深入分析绘制和内存的原理,一步步深入了解导致性能问题的本质原因,同时讲述了多种性能优化工具的使用,通过分析典型案例,得到有效的优化方案,从而实现更高质量的应用。书中所讲述的内容均基于Android 6.0系统。
勘误和资源下载
由于写作时间实在有限,在书稿交付时仍有些许不安,为此先为此书可能存在的错误或者描述不清楚的地方致以真诚的歉意,如果你发现此书存在瑕疵或者有任何建议,请发邮件到5482586@qq.com,我会尽快回复,非常期待大家的反馈。
本书代码的下载地址:https://github.com/lyc7898/AndroidTech。
致谢
由于时间的问题,本书写作时间非常长,非常感谢杨福川编辑对我的鼓励和宽容,并且分享了非常有用的碎片化写作方法,使我一直坚持把本书写完。同时感谢李艺编辑的校对和勘误,才完成了这本图文并茂、格式清晰的技术书籍。
感谢我的妻子李萍女士对我的理解和支持,在我几乎将所有的时间投入工作中时一直给予最大的宽容和鼓励,使我每天即使再忙再累时仍然可以回到温馨的家。同时感谢我的父母和岳父母,感谢他们对我无私的帮助,他们都是伟大的父母。
特别感谢我的爷爷罗志华老先生,在我的学习生涯中给予的无私帮助,在工作和生活上的谆谆教诲。还要感谢刘景瑜老师,在求学阶段的鼓励和教诲,告诉我有很多需要去做的事情。
最后感谢我现在工作的公司,在这里我得到了最快的成长,学习到非常多的东西,感谢公司领导及所有同事,在这里工作,能感受到大家每天都在成长。
目  录
前 言
第1章 Android Studio使用指南  
第2章 绘制优化  
2.8 卡顿监控方案与实现  66
2.9 本章小结  
第3章 内存优化  80
3.1 Android内存管理机制  81
3.1.1 Java对象生命周期  81
3.1.2 内存分配  82
3.1.3 内存回收机制  84
3.1.4 GC类型  86
3.2 优化内存的意义  87
3.3 内存分析工具  90
3.3.1 Memory Monitor  90
3.3.2 Heap Viewer  91
3.3.3 Allocation Tracker  94
3.4 避免内存泄漏  96
3.4.1 内存泄漏定义  97
3.4.2 使用MAT查找内存泄漏  97
3.4.3 常见内存泄漏场景  103
3.4.4 内存泄漏监控  106
3.5 优化内存空间  109
3.5.1 对象引用  109
3.5.2 减少不必要的内存开销  110
3.5.3 使用最优的数据类型  112
3.5.4 图片内存优化  117
3.6 图片管理模块设计与实现  120
3.6.1 实现异步加载功能  121
3.6.2 实现三重缓存  130
3.6.3 开源图片组件  140
3.7 本章小结  142
第4章 存储优化  144
4.1 存储方式  144
4.1.1 SharedPreferences  145
4.1.2 文件存储  145
4.1.3 SQLite(需要扩展)  146
4.1.4 ContentProvider  147
4.2 序列化  147
4.2.1 Serializable与Parcelable  148
4.2.2 Gson实现JSON的序列化和反序列化  148
4.2.3 Nano Proto Buffers  149
4.2.4 FlatBuffers  149
4.2.5 小结  150
4.3 SharedPreferences优化  150
4.4 数据库使用及优化  151
4.4.1 数据库实现  152
4.4.2 数据库优化  157
4.5 本章小结  161
第5章 稳定性优化  162
5.1 提高代码质量  162
5.1.1 代码审查  163
5.1.2 代码静态扫描工具  166
5.2 Crash监控  168
5.2.1 Java层Crash监控  168
5.2.2 Native层Crash监控  171
5.2.3 Crash上报机制  173
5.3 ANR剖析  173
5.3.1 ANR介绍  173
5.3.2 ANR分析  174
5.3.3 ANR监控  176
5.4 提高后台进程存活率  178
5.4.1 应用进程优先级  178
5.4.2 利用SyncAdapter提高进程优先级  180
5.5 本章小结  183
第6章 耗电优化  184
6.1 耗电检测工具  184
6.2 三大模块省电优化  187
6.2.1 显示  187
6.2.2 网络  188
6.2.3 CPU  189
6.3 应用常用优化方案  191
6.3.1 计算优化  191
6.3.2 避免WakeLock使用不当  192
6.3.3 使用Job Scheduler  193
6.4 Doze模式  197
6.4.1 Doze模式介绍  197
6.4.2 Doze模式应用策略  198
6.4.3 测试Doze模式应用工作状态  199
6.5 本章小结  199
第7章 安装包大小优化  200
7.1 应用装包的构成  200
7.2 减少安装包大小的常用方案  203
7.2.1 代码混淆  203
7.2.2 资源优化  204
7.2.3 其他优化  206
7.3 本章小结  207
结束语  208
相关文章
|
2天前
|
Android开发 开发者
Android性能优化——内存管理的艺术
Android性能优化——内存管理的艺术
|
7天前
|
Android开发 开发者 UED
安卓开发中自定义View的实现与性能优化
【10月更文挑战第28天】在安卓开发领域,自定义View是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何高效地创建和管理自定义View,以及如何通过代码和性能调优来确保流畅的交互体验。我们将一起学习自定义View的生命周期、绘图基础和事件处理,进而探索内存和布局优化技巧,最终实现既美观又高效的安卓界面。
20 5
|
6天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
7天前
|
缓存 数据库 Android开发
安卓开发中的性能优化技巧
【10月更文挑战第29天】在移动应用的海洋中,性能是船只能否破浪前行的关键。本文将深入探讨安卓开发中的性能优化策略,从代码层面到系统层面,揭示如何让应用运行得更快、更流畅。我们将以实际案例和最佳实践为灯塔,引领开发者避开性能瓶颈的暗礁。
22 3
|
5天前
|
算法 JavaScript Android开发
|
6天前
|
存储 搜索推荐 Java
打造个性化安卓应用:从设计到实现
【10月更文挑战第30天】在数字化时代,拥有一个个性化的安卓应用不仅能够提升用户体验,还能加强品牌识别度。本文将引导您了解如何从零开始设计和实现一个安卓应用,涵盖用户界面设计、功能开发和性能优化等关键环节。我们将以一个简单的记事本应用为例,展示如何通过Android Studio工具和Java语言实现基本功能,同时确保应用流畅运行。无论您是初学者还是希望提升现有技能的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧。
|
10天前
|
搜索推荐 开发工具 Android开发
打造个性化Android应用:从设计到实现的旅程
【10月更文挑战第26天】在这个数字时代,拥有一个能够脱颖而出的移动应用是成功的关键。本文将引导您了解如何从概念化阶段出发,通过设计、开发直至发布,一步步构建一个既美观又实用的Android应用。我们将探讨用户体验(UX)设计的重要性,介绍Android开发的核心组件,并通过实际案例展示如何克服开发中的挑战。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧,帮助您在竞争激烈的应用市场中脱颖而出。
|
11天前
|
算法 Java 数据库
Android 应用的主线程在什么情况下会被阻塞?
【10月更文挑战第20天】为了避免主线程阻塞,我们需要合理地设计和优化应用的代码。将耗时操作移到后台线程执行,使用异步任务、线程池等技术来提高应用的并发处理能力。同时,要注意避免出现死循环、不合理的锁使用等问题。通过这些措施,可以确保主线程能够高效地运行,提供流畅的用户体验。
25 2
|
15天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
44 5
下一篇
无影云桌面