Android应用性能优化[法] Hervé Guihot作者简介、书籍目录、内容摘要、编辑推荐
《Android应用性能优化》主要介绍如何调优Android应用,以使应用更健壮并提高其执行速度。内容包括用Java、NDK优化应用,充分利用内存以使性能最大化,尽最大可能节省电量,何时及如何使用多线程,如何使用基准问题测试代码,如何优化OpenGL代码和使用Renderscript等。《Android应用性能优化》面向熟悉Java和Android
SDK的想要进一步学习如何用本地代码优化应用性能的Android开发人员。
作者简介
Hervé Guihot
目前在联发科技公司(MTK,www,mediatek.com)担任软件工程经理。他有十多年的嵌入式系统开发工作经验,主要与数字电视技术相关。目前正在研究如何将Android引入基于ARM的数字家庭平台。
书籍目录
第1章 Java代码优化
1.1 Android如何执行代码
1.2 优化斐波纳契数列
1.2.1 从递归到迭代
1.2.2 BigInteger
1.3 缓存结果
1.4 API等级
1.5 数据结构
1.6 响应能力
1.6.1 推迟初始化
1.6.2 StrictMode
1.7 SQLite
1.7.1 SQLite语句
1.7.2 事务
1.7.3 查询
1.8 总结
第2章 NDK入门
2.1 NDK里有什么
2.2 混合使用Java和C/C++代码
2.2.1 声明本地方法
2.2.2 实现JNI粘合层
2.2.3 创建Makefile
2.2.4 实现本地函数
2.2.5 编译本地库
2.2.6 加载本地库
2.3 Application.mk
2.3.1 为(几乎)所有设备优化
2.3.2 支持所有设备
2.4 Android.mk
2.5 使用C/C++改进性能
2.6 本地Acitivity
2.6.1 构建缺失的库
2.6.2 替代方案
2.7 总结
第3章 NDK进阶
3.1 汇编
3.1.1 最大公约数
3.1.2 色彩转换
3.1.3 并行计算平均值
3.1.4 ARM指令
3.1.5 ARM NEON
3.1.6 CPU特性
3.2 C扩展
3.2.1 内置函数
3.2.2 向量指令
3.3 技巧
3.3.1 内联函数
3.3.2 循环展开
3.3.3 内存预读取
3.3.4 用LDM/STM替换LDR/STD
3.4 总结
第4章 高效使用内存
4.1 说说内存
4.2 数据类型
4.2.1 值的比较
4.2.2 其他算法
4.2.3 数组排序
4.2.4 定义自己的类
4.3 访问内存
4.4 排布数据
4.5 垃圾收集
4.5.1 内存泄漏
4.5.2 引用
4.6 API
4.7 内存少的时候
4.8 总结
第5章 多线程和同步
5.1 线程
5.2 AsyncTask
5.3 Handler和Looper
5.3.1 Handler
5.3.2 Looper
5.4 数据类型
5.5 并发
5.6 多核
5.6.1 为多核修改算法
5.6.2 使用并发缓存
5.7 Activity生命周期
5.7.1 传递信息
5.7.2 记住状态
5.8 总结
第6章 性能评测和剖析
6.1 时间测量
6.1.1 System.nanoTime()
6.1.2 Debug.threadCpuTimeNanos()
6.2 方法调用跟踪
6.2.1 Debug.startMethodTracing()
6.2.2 使用Traceview工具
6.2.3 DDMS中的Traceview
6.2.4 本地方法跟踪
6.3 日志
6.4 总结
第7章 延长电池续航时间
7.1 电池
7.2 禁用广播接收器
7.3 网络
7.3.1 后台数据
7.3.2 数据传输
7.4 位置
7.4.1 注销监听器
7.4.2 更新频率
7.4.3 多种位置服务
7.4.4 筛选定位服务
7.4.5 最后已知位置
7.5 传感器
7.6 图形
7.7 提醒
7.8 WakeLock
7.9 总结
第8章 图形
8.1 布局优化
8.1.1 相对布局
8.1.2 合并布局
8.1.3 重用布局
8.1.4 ViewStub
8.2 布局工具
8.2.1 层级视图
8.2.2 layoutopt
8.3 OpenGL ES
8.3.1 扩展
8.3.2 纹理压缩
8.3.3 Mipmap
8.3.4 多APK
8.3.5 着色
8.3.6 场景复杂性
8.3.7 消隐
8.3.8 渲染模式
8.3.9 功耗管理
8.4 总结
第9章 RenderScript
9.1 概览
9.2 Hello World
9.3 Hello Rendering
9.3.1 创建渲染脚本
9.3.2 创建RenderScriptGL Context
9.3.3 展开RSSurfaceView
9.3.4 设置内容视图
9.4 在脚本中添加变量
9.5 HelloCompute
9.5.1 Allocation
9.5.2 rsForEach
9.5.3 性能
9.6 自带的RenderScript API
9.6.1 rs_types.rsh
9.6.2 rs_core.rsh
9.6.3 rs_cl.rsh
9.6.4 rs_math.rsh
9.6.5 rs_graphics.rsh
9.6.6 rs_time.rsh
9.6.7 rs_atomic.rsh
9.7 RenderScript与NDK对比
9.8 总结
章节摘录
版权页: 插图: Android Market可以让应用发布多个APK,每个针对不同的配置。例如,可以让一个APK只使用ETC1纹理,另一个用PVRTC纹理——即为使用PowervR的Android设备优化。这些APK共享相同的AndroidMarket列表,AndroidMarket会为每个设备仔细选择适合的APK。用户不必担心下载并安装的APK是否正确,这一切是自动和透明的。 注意并非所有的Android应用商店都支持此功能,所以如果你打算分发应用到多个商店,还是尽可能用适合所有设备的单一APK吧。 当然,纹理可能不是你需要发布多个APK的唯一原因。例如,你可能针对旧设备发布小的APK,对较新的设备发布带有更多功能且更大的APK。虽然可以使用多个APK,但它会使发布流程和维护变得复杂,因此,建议你尽可能尝试发布单一APK。 8.3.5着色 OpenGL Es 2.o支持OpenGL Es着色语言(shadillg Language),以取代OpenGL ES 1.x中的固定变换函数和分散的管线(pipeline)。这种语言基于C,可以让你编写自己的顶点(venex)和片段(fragment)着色来控制OpenGL管线。 像C程序一样,着色器可以非常简单,也可极其复杂。虽然没有必须遵循的单一规则,但你应该尽可能减少着色器的复杂性,这会非常影响性能。 8.3.6场景复杂性 显然,渲染复杂的场景比简单的要花的时间长。一个提高帧速率的方法是简化要渲染的场景,同时保持可接受的视觉质量。例如,对于可看到的纹理,较远的物体可以减少细节,使用更少的三角形。简单的对象使用的内存和带宽较少。 8.3.7 消隐 尽管GPU擅长几何运算,并能确定要渲染的物体,但应用应该尽力消隐(Culling)视线以外的物体,这样就不会向那些因为不可见而要丢弃的对象发送绘制命令。 消隐对象(甚至三角形)有许多方法,这些已超出本书的范围,帧速率低于预期可能是考虑不周的消隐方法造成的。例如,可以快速消除摄像机(camera)后面的物体。 注意大多情况下你可以启用背面消隐(Backface Culling),这将不会渲染对象背面的三角形。
媒体关注与评论
“本书详细介绍了优化Android代码的各种规则和技巧,揭开了Android和JAVA核心数据结构的神秘面纱。最值得称道的是,作者展示了使用缓存、SQLite以及延长电池使用寿命的技术,这是每个严谨的开发人员都必须要掌握的内容。”——网友评论“市面上这种书并不多见!我想把这本书推荐给所有Android高级程序员。”——网友评论
编辑推荐
Android应用开发者经常要想尽办法来提升程序性能。Herve Guihot专著的《Android应用性能优化》主要介绍如何快速高效地优化应用,让应用变得稳定高效。你将学会利用Android SDK和NDK来混合或单独使用Java、C/C++来开发应用。 把Herve Guihot专著的《Android应用性能优化》的内容学以致用,你的编程技术就会得到关键性的提升,写出的应用就会更为健壮高效,从而广受用户好评,并最终获得成功。