Android高性能编程

更多详情

内容简介: 《Android高性能编程》旨在为Android 开发者指明提高应用程序性能的方向。第1 章就什么是高性能、为什么需要高性能展开讨论。第2 章为读者展示了一些用于调试应用程序的工具、方案以及技巧。第3~8 章围绕着布局、内存、多线程、网络、安全、电量消耗等多个方面,阐述如何打造高性能应用程序。第9 章相对独立,介绍的是原生开发。第10 章与前面章节的关系也不大,涵盖了一些琐碎但对性能至关重要的小技巧,例如,图像处理、序列化、优化APK 文件,等等。
《Android高性能编程》面向具有一定Android 开发经验,希望得到进一步提升的工程师。

目录: 1 引言:为什么需要高性能? 1
为什么应用程序的性能意味着这么多? 2
手动测试和自动测试 3
ANR和软件中的延迟 3
什么会触发ANR,我该如何避免它们? 4
Android架构 4
Dalvik虚拟机 5
内存管理 5
电量消耗 6
Java语言 7
NDK/在需要时进行原生开发 7
程序响应相关的3个临界值 8
软件质量的商业价值 8
总结 9
2 高效调试 11
ADB 11
DDMS 12
采集和分析线程信息 14
堆分析和可视化 16
Allocation Tracker 19
网络使用 20
Emulator Control 22
系统状态 23
调试UI 24
使用Hierarchy Viewer 26
Systrace 28
Android设备调试选项 29
Android即时运行 38
GPU分析器 39
使用GPU分析器进行调试 41
ClassyShark 42
开始使用 42
总结 46
3 打造布局 47
预览 47
渲染性能 47
屏幕撕裂和垂直同步 50
多窗口模式 57
最佳实践 63
布局概述 64
布局层次管理 64
布局复用 70
ViewStub 73
AdapterView和视图回收 74
自定义视图和布局 78
屏幕缩放 83
调试工具 84
Design窗口 85
Hierarchy Viewer 86
设备上的调试工具 90
Systrace 97
总结 101
4 内存 103
预览 103
内存如何工作 104
垃圾回收 104
内存共享 104
运行时 105
Android N 即时编译器 106
内存泄露 107
内存抖动 108
引用 108
内存相关的项目 109
最佳实践 111
数据类型 111
语法 117
常量 123
对象管理 124
内存设计模式 129
Android组件泄露 137
进程 150
内存API 151
主要组件和内存管理 153
调试工具 156
LogCat 156
ActivityManager API 159
StrictMode 160
Dumpsys 161
总结 168
5 多线程 169
预览 169
线程基础 170
Android多线程环境 174
Android应用程序线程 175
Android线程消息 176
最佳实践 179
线程 179
HandlerThread 179
AsyncTask 181
Loaders 185
Services 188
进程间通信 197
先进的技术 202
调试工具 210
StrictMode 210
总结 211
6 网络 213
预览 213
协议 215
方法 216
头部 216
超时 217
内容 217
响应码 218
连接类型 218
最佳实践 219
延迟测定 219
批量连接 221
对响应进行缓存 222
指数退避算法 226
轮询VS推送 228
所提供的API 229
Android N带来的新变化 234
调试工具 243
Android N网络ADB工具 244
Fiddler 244
Wireshark 245
Application Resource Optimizer 246
网络衰减 248
模拟网络加速和延迟 248
总结 252
7 安全 255
WhatsApp - 连续出现问题 256
深入代码 258
捕获APK文件 259
从设备上拉取APK文件 259
利用Wireshark捕获APK文件 260
利用外部网站 261
剖析APK文件 262
代码注入 267
操作码 270
注入新代码 270
签名并重新构建应用程序 273
保护应用程序 274
非安全存储 277
SharedPreferences 277
内部存储 278
外部存储 280
删除文件 282
使用外部存储还是内部存储 282
数据库 283
数据库中的性能 284
SQL注入 284
ORM框架 286
OrmLite 286
SugarORM 287
GreenDAO 288
Realm 289
网络 289
通信加密 290
嗅探 290
总结 292
8 优化电量消耗 295
分析 295
监测电池电量和充电状态 298
识别充电状态的变化 299
确定及响应电池电量的变化 300
Doze和App Standby 301
理解Doze 301
避免无用的网络请求 302
按需对待BroadcastReceivers 304
网络 305
总结 306
9 Android中的原生代码 309
入门--在系统中配置NDK 310
JNI 311
基本概念 312
创建首个JNI程序HelloWorld-JNI 313
使用Android NDK创建一个原生Activity 318
调试NDK 321
Android.mk 324
NDK定义的变量 325
TARGET_PLATFORM 325
TARGET_ARCH 325
TARGET_ABI 326
NDK提供的宏 326
Application.mk 327
引入已存在的库 329
导出头文件 330
总结 330
10 性能提示 333
位图 333
加载 334
处理 340
缓存 341
显示 346
管理内存 348
图像优化 352
分辨率 353
压缩 354

前言: 序言应用程序在移动世界中能否成功,性能是其中一个关键的因素。如果一个应用程序运行缓慢,用户可能会放弃继续使用它。学习如何创建一个应用程序,让程序在速度、性能,以及功能交互之间达到平衡,将会是一个挑战。做到这点比以往任何时候都更重要。《Android高性能编程》将让你学习到如何让程序能够运行到尽可能多的硬件设备上,使得应用程序覆盖更多用户。这本书首先简要地介绍了Android开发中一些最先进的技术,以及性能对Android应用程序的重要性。接着,介绍了使用Android SDK工具,对Android应用程序进行调试和分析的常规做法。本书将讨论一些先进的主题,例如,打造布局、多线程、网络以及安全。电池电量是应用程序的最大瓶颈之一,本书将通过典型的代码,阐释如何减少电量消耗,以及在不同情形下如何测量电量的消耗。本书探讨的技术,是为打造一个优化高效的系统。这是一个不会消耗大量电量,或引起内存泄露,随着时间的推移,运行越来越慢的系统。这本书涵盖了什么第1章,引言:为什么需要高性能?对主题进行概要介绍,简要分析了Android平台的现状,以及高性能对Android应用程序的重要性。第2章,高效调试。涵盖了调试和分析Android应用程序常用的一些工具, 不仅限于Android SDK 所提供的,还包括一些第三方的。第3章,打造布局。展示优化Android程序的相关技术,编写内存高效的应用程序,并介绍内存分配以及垃圾回收的相关概念。第4章,内存。提供了许多UI设计方面的见解,通过学习这些内容,打造加载迅速,更新高效,不会令用户察觉到延迟的UI界面。第5章,多线程。介绍了Android应用程序中可供使用的各种线程,以及它们特定的使用场景。一些先进的技术,例如IPC,将会通过代码示例来展示。第6章,网络。介绍了高效操作网络的相关技术,以及从服务端获取数据的一些技术,例如指数退避算法或避免轮询。第7章,安全。涵盖了确保Android应用程序安全的相关技术,如何利用Android自带的安全加密机制,以及如何获取关于连接的信息,或者只是在连接变化的时候得到通知。第8章,优化电量消耗。通过典型的代码,演示如何耗尽电池的电量,如何阻止它,以及在各种情形下如何权衡电量的消耗;许多开发者不知道,开发一个拍照或录制视频的应用程序时,任何处理预览以及保存数据。第9章,Android中的原生代码。这一章节将全部用于介绍Android中的原生代码和C 以及它们的用法。第10章,性能提示。帮助开发者在平时的开发中,避开影响效率的方案;这是前面章节中未涉及的一个最佳实践指南。你需要准备什么?你需要准备以下硬件设备。?\t运行环境为Windows、Linux,或者Mac OS X 的PC/笔记本电脑。?\tAndroid手机。最好是高端一点的,并且系统版本高于Android5.0。这本书为谁而写?这本书是为那些已经拥有丰富Android知识,想要进一步巩固和学习技术,来提高应用程序性能的开发者而写的。我假设他们已经熟悉整个Android SDK,且为此工作了多年。他们也熟悉Android框架,比如,能使用NDK编写原生代码,NDK对性能来说至关重要。约定本书会涉及几种不同的文本样式,分别代表不同类型的信息。下面展示了其中一些样式及它们代表的意思。代码文本、数据库表名、文件名、文件扩展名、路径、URLs、用户输入,以及推特账号名的文本样式如下。“If you go to this folder and call the command adb, you will see on the screen a list of available options.”代码块的格式如下。<resources>           <style name=”Theme.NoBackground”parent=”android:Theme”>         <item name=”android:windowBackground”>@null</item>     </style></resources>任何命令行输入输出的格式如下。adb shell dumbsys gfxinfo <PACKAGE_NAME>新条款以及重要的词会以黑体展示。屏幕上显示的单词,例如菜单或者对话框内出现的文本格式类似这样:“To debug the overdraw on the device,Android provides a helpful tool that can be enabled inside the Developer options.”
警告或重要提示或出现这样一个框框中。
提示及小技巧会以这样的形式出现。读者反馈欢迎读者反馈。你对这本书的看法——喜欢或者不喜欢。读者的反馈对我们来说非常重要,它能最大程度地帮助我们写出读者需要的内容。发送邮件到feedback@packtpub.com,并在邮件的标题中附上书名,即可给我们反馈。如果你对某个主题有丰富的经验并且有兴趣写作或者参与对某本书的编写,可以查看我们的作者引导页面www.packtpub.com/authors。客服支持很高兴您成为Packt系列丛书的拥有者,为此,我们会为您提供一系列服务。下载示例代码可以到http://www.packtpub.com登录账户,下载本书的示例代码文件。如果你从别处购买本书,可以访问http://www.packtpub.com/support并注册,我们会通过邮件直接将文件发送给你。你可以通过下列步骤下载代码文件。1.到我们的网站登录或注册。2.点击网站顶部的SUPPORT tab页面。3.点击Code Downloads & Errata。4.在搜索框中输入书本的名字。5.选中你要下载代码的对应的图书。6.在下拉菜单中选择图书的购买地。7.点击Code Download。可以在Packt 出版社网站对应的书本页面,点击Code Files按钮来下载本书的代码文件。书本页面可以通过搜索框中输入书本名进入。注意,前提是你需要登录你的Packt账户。文件下载好后,请确使用的解压工具是最新版本。?\tWindows使用WinRAR / 7-Zip?\tMac 使用 Zipeg / iZip?\tLinux 使用 7-Zip / PeaZip这本书的代码也存放在GitHub上https://github.com/PacktPublishing/ Android-High-Performance-Programming。同时,我们也有其他丰富的代码、书本目录、视频等可以提供给你。https://github.com/PacktPublishing/。欢迎下载它们!下载本书的彩图我们也为你提供了本书所用到的截屏和图表。这些彩图更利于你理解和区别代码结果的变化。你可以在以下网址中下载这些文件http://www.packtpub.com/sites/default/files/downloads/AndroidHighPerformanceProgramming_ColorImages.pdf。勘误尽管我们已经非常仔细,以确保书本内容的准确性,但是错误难免还是会发生。如果你在书中遇到一个错误(可能是一个文本错误或者代码错误),如果你能报告给我们,我们不甚感激。这样做能够减少对其他读者的困扰并能帮助我们在后续版本中改进这些问题。如果你遇到任何错误,请访问http://www.packtpub.com/submit-errata,选择你要报告的图书中,点击Errata Submission Form链接,输入你所遇到错误的详细信息,发送给我们。一旦错误被确认,你所提交的内容会被接受,并且更新到我们网站中,或者添加到要报告的图书中已有的相应章节下的勘误表中。通过访问https://www.packtpub.com/books/content/support并输入图书名进行搜索,可以查看之前已经提交的勘误。相关的信息将会出现在Errata部分中。版权保护对互联网上所有的媒体资源来说,版权保护一直以来都是一个问题。Packt出版社十分重视对版权和许可证的保护。如果你在互联网上遇到以任何形式非法盗版我们内容的情况,请立刻为我们提供地址或网站名,以便我们及时补救。请将涉嫌盗版的材料的链接地址发送到copyright@packtpub.com。非常感谢您对维护我们作者的权益、打击盗版,并使得我们能为用户带来更好的内容所给予的帮助。问题如果有任何关于这本书的问题,可以通过questions@packtpub.com联系我们,我们将会尽可能为你解答。

序言: 应用程序在移动世界中能否成功,性能是其中一个关键的因素。如果一个应用程序运行缓慢,用户可能会放弃继续使用它。学习如何创建一个应用程序,让程序在速度、性能,以及功能交互之间达到平衡,将会是一个挑战。做到这点比以往任何时候都更重要。
《Android高性能编程》将让你学习到如何让程序能够运行到尽可能多的硬件设备上,使得应用程序覆盖更多用户。这本书首先简要地介绍了Android开发中一些最先进的技术,以及性能对Android应用程序的重要性。接着,介绍了使用Android SDK工具,对Android应用程序进行调试和分析的常规做法。本书将讨论一些先进的主题,例如,打造布局、多线程、网络以及安全。电池电量是应用程序的最大瓶颈之一,本书将通过典型的代码,阐释如何减少电量消耗,以及在不同情形下如何测量电量的消耗。
本书探讨的技术,是为打造一个优化高效的系统。这是一个不会消耗大量电量,或引起内存泄露,随着时间的推移,运行越来越慢的系统。
这本书涵盖了什么
第1章,引言:为什么需要高性能?对主题进行概要介绍,简要分析了Android平台的现状,以及高性能对Android应用程序的重要性。
第2章,高效调试。涵盖了调试和分析Android应用程序常用的一些工具, 不仅限于Android SDK 所提供的,还包括一些第三方的。
第3章,打造布局。展示优化Android程序的相关技术,编写内存高效的应用程序,并介绍内存分配以及垃圾回收的相关概念。
第4章,内存。提供了许多UI设计方面的见解,通过学习这些内容,打造加载迅速,更新高效,不会令用户察觉到延迟的UI界面。
第5章,多线程。介绍了Android应用程序中可供使用的各种线程,以及它们特定的使用场景。一些先进的技术,例如IPC,将会通过代码示例来展示。
第6章,网络。介绍了高效操作网络的相关技术,以及从服务端获取数据的一些技术,例如指数退避算法或避免轮询。
第7章,安全。涵盖了确保Android应用程序安全的相关技术,如何利用Android自带的安全加密机制,以及如何获取关于连接的信息,或者只是在连接变化的时候得到通知。
第8章,优化电量消耗。通过典型的代码,演示如何耗尽电池的电量,如何阻止它,以及在各种情形下如何权衡电量的消耗;许多开发者不知道,开发一个拍照或录制视频的应用程序时,任何处理预览以及保存数据。
第9章,Android中的原生代码。这一章节将全部用于介绍Android中的原生代码和C++以及它们的用法。
第10章,性能提示。帮助开发者在平时的开发中,避开影响效率的方案;这是前面章节中未涉及的一个最佳实践指南。
你需要准备什么?
你需要准备以下硬件设备。
√ 运行环境为Windows、Linux,或者Mac OS X 的PC/笔记本电脑。
√ Android手机。最好是高端一点的,并且系统版本高于Android5.0。
这本书为谁而写?
这本书是为那些已经拥有丰富Android知识,想要进一步巩固和学习技术,来提高应用程序性能的开发者而写的。我假设他们已经熟悉整个Android SDK,且为此工作了多年。他们也熟悉Android框架,比如,能使用NDK编写原生代码,NDK对性能来说至关重要。
约定
本书会涉及几种不同的文本样式,分别代表不同类型的信息。下面展示了其中一些样式及它们代表的意思。
代码文本、数据库表名、文件名、文件扩展名、路径、URLs、用户输入,以及推特账号名的文本样式如下。
"If you go to this folder and call the command adb, you will see on the screen a list of available options."
代码块的格式如下。
@null
任何命令行输入输出的格式如下。
adb shell dumbsys gfxinfo
新条款以及重要的词会以黑体展示。屏幕上显示的单词,例如菜单或者对话框内出现的文本格式类似这样:"To debug the overdraw on the device,Android provides a helpful tool that can be enabled inside the Developer options."
警告或重要提示或出现这样一个框框中。
提示及小技巧会以这样的形式出现。
读者反馈
欢迎读者反馈。你对这本书的看法--喜欢或者不喜欢。读者的反馈对我们来说非常重要,它能最大程度地帮助我们写出读者需要的内容。
发送邮件到feedback@packtpub.com,并在邮件的标题中附上书名,即可给我们反馈。
如果你对某个主题有丰富的经验并且有兴趣写作或者参与对某本书的编写,可以查看我们的作者引导页面www.packtpub.com/authors。
客服支持
很高兴您成为Packt系列丛书的拥有者,为此,我们会为您提供一系列服务。
下载示例代码
可以到http://www.packtpub.com登录账户,下载本书的示例代码文件。如果你从别处购买本书,可以访问http://www.packtpub.com/support并注册,我们会通过邮件直接将文件发送给你。
你可以通过下列步骤下载代码文件。
1.到我们的网站登录或注册。
2.点击网站顶部的SUPPORT tab页面。
3.点击Code Downloads & Errata。
4.在搜索框中输入书本的名字。
5.选中你要下载代码的对应的图书。
6.在下拉菜单中选择图书的购买地。
7.点击Code Download。
可以在Packt 出版社网站对应的书本页面,点击Code Files按钮来下载本书的代码文件。书本页面可以通过搜索框中输入书本名进入。注意,前提是你需要登录你的Packt账户。
文件下载好后,请确使用的解压工具是最新版本。
√ Windows使用WinRAR / 7-Zip
√ Mac 使用 Zipeg / iZip
√ Linux 使用 7-Zip / PeaZip
这本书的代码也存放在GitHub上https://github.com/PacktPublishing/ Android-High-Performance-Programming。
同时,我们也有其他丰富的代码、书本目录、视频等可以提供给你。
https://github.com/PacktPublishing/。
欢迎下载它们!
下载本书的彩图
我们也为你提供了本书所用到的截屏和图表。这些彩图更利于你理解和区别代码结果的变化。你可以在以下网址中下载这些文件
http://www.packtpub.com/sites/default/files/downloads/AndroidHighPerformanceProgramming_ColorImages.pdf。
勘误
尽管我们已经非常仔细,以确保书本内容的准确性,但是错误难免还是会发生。如果你在书中遇到一个错误(可能是一个文本错误或者代码错误),如果你能报告给我们,我们不甚感激。这样做能够减少对其他读者的困扰并能帮助我们在后续版本中改进这些问题。如果你遇到任何错误,请访问http://www.packtpub.com/submit-errata,选择你要报告的图书中,点击Errata Submission Form链接,输入你所遇到错误的详细信息,发送给我们。一旦错误被确认,你所提交的内容会被接受,并且更新到我们网站中,或者添加到要报告的图书中已有的相应章节下的勘误表中。
通过访问https://www.packtpub.com/books/content/support并输入图书名进行搜索,可以查看之前已经提交的勘误。相关的信息将会出现在Errata部分中。
版权保护
对互联网上所有的媒体资源来说,版权保护一直以来都是一个问题。Packt出版社十分重视对版权和许可证的保护。如果你在互联网上遇到以任何形式非法盗版我们内容的情况,请立刻为我们提供地址或网站名,以便我们及时补救。
请将涉嫌盗版的材料的链接地址发送到copyright@packtpub.com。
非常感谢您对维护我们作者的权益、打击盗版,并使得我们能为用户带来更好的内容所给予的帮助。
问题
如果有任何关于这本书的问题,可以通过questions@packtpub.com联系我们,我们将会尽可能为你解答。