深入理解Android:卷2.pdf

深入理解Android:卷2.pdf
 

书籍描述

编辑推荐
《深入理解Android:卷2》编辑推荐:经典畅销书《深入理解Android:卷I》姊妹篇,51CTO移动开发频道和开源中国社区一致鼎力推荐!从系统设计者的角度对Java Framework包含的重要模块和服务的源代码进行细致剖析,深刻揭示其实现原理和工作机制。

媒体推荐
市面上关于Android源码分析的书非常多,但是没有一本书的分析粒度像本书这样细致。Android系统本身非常庞大,源代码错综复杂,的确很难想象仅靠一本书就能透彻分析整个系统的原理。“深入理解Android”系列图书考虑到了这一点,于是每一本书只专注于一个大的主题,卷I和卷II关注的都是Android的框架层,卷I针对的是Native Framework,卷II针对的是Java Framework。如果想从Android系统设计者的角度彻底理解整个系统的架构思想和设计原理,以及系统中各个服务和模块之间错综复杂的关系,“深入理解Android”系列图书应该是目前最好的选择之一!
——51CTO移动开发频道

“深入理解Android”系列的卷I上市后,既叫好,又叫座,在Android开发者圈子里反响强烈。从Android源代码分析的角度来讲,该系列书从内容和分析方法上确实值得称道,不仅能体现作者的技术水准,而且能看出作者的用心良苦。在内容细节和作者自己对Android系统的认识深入程度上,卷II在卷I更上一层楼,内容更加精彩。不仅深入地分析了Java Framework层各种服务和模块的工作原理和实现机制,而且还理清了它们之间的关系。对于想提高Android开发水平的读者来说,本书值得反复研读!
——开源中国社区

作者简介
邓凡平,资深Android开发工程师和系统工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,经验十分丰富。《深入理解Android:卷I》的作者,同时也是“深入理解Android”系列图书的总策划。目前就职于国内领先的Android企业中科创达(ThunderSoft),负责Android Framework的开发和维护。喜欢钻研,乐于分享,活跃于CSDN、51CTO和开源中国等专业技术社区,撰写的Android Framework源码分析的系列文章深受读者欢迎。此外,他对Linux内核、C/C++/Python相关的技术,以及高性能网络服务器和多核并行开发等也有一定的研究。

目录
前言
第1章 搭建Android源码工作环境
1.1 Android系统架构
1.2 搭建开发环境
1.2.1 下载源码
1.2.2 编译源码
1.2.3 利用Eclipse调试system_process
1.3 本章小结
第2章 深入理解Java Binder和MessageQueue
2.1 概述
2.2 Java层中的Binder架构分析
2.2.1 Binder架构总览
2.2.2 初始化Java层Binder框架
2.2.3 addService实例分析
2.2.4 Java层Binder架构总结
2.3 心系两界的MessageQueue
2.3.1 MessageQueue的创建
2.3.2 提取消息
2.3.3 nativePollOnce函数分析
2.3.4 MessageQueue总结
2.4 本章小结
第3章 深入理解SystemServer
3.1 概述
3.2 SystemServer分析
3.2.1 main函数分析
3.2.2 Service群英会
3.3 EntropyService分析
3.4 DropBoxManagerService分析
3.4.1 DBMS构造函数分析
3.4.2 dropbox日志文件的添加
3.4.3 DBMS和settings数据库
3.5 DiskStatsService和DeviceStorageMonitorService分析
3.5.1 DiskStatsService分析
3.5.2 DeviceStorageManagerService分析
3.6 SamplingProfilerService分析
3.6.1 SamplingProfilerService构造函数分析
3.6.2 SamplingProfilerIntegration分析
3.7 ClipboardService分析
3.7.1 复制数据到剪贴板
3.7.2 从剪切板粘贴数据
3.7.3 CBS中的权限管理
3.8 本章小结
第4章 深入理解PackageManagerService
4.1 概述
4.2 初识PackageManagerService
4.3 PKMS的main函数分析
4.3.1 构造函数分析之前期准备工作
4.3.2 构造函数分析之扫描Package
4.3.3 构造函数分析之扫尾工作
4.3.4 PKMS构造函数总结
4.4 APK Installation分析
4.4.1 adb install分析
4.4.2 pm分析
4.4.3 installPackageWithVerification函数分析
4.4.4 APK 安装流程总结
4.4.5 Verification介绍
4.5 queryIntentActivities分析
4.5.1 Intent及IntentFilter介绍
4.5.2 Activity信息的管理
4.5.3 Intent 匹配查询分析
4.5.4 queryIntentActivities总结
4.6 installd及UserManager介绍
4.6.1 installd介绍
4.6.2 UserManager介绍
4.7 本章学习指导
4.8 本章小结
第5章 深入理解PowerManagerService
5.1 概述
5.2 初识PowerManagerService
5.2.1 PMS构造函数分析
5.2.2 init分析
5.2.3 systemReady分析
5.2.4 BootComplete处理
5.2.5 初识PowerManagerService总结
5.3 PMS WakeLock分析
5.3.1 WakeLock客户端分析
5.3.2 PMS acquireWakeLock分析
5.3.3 Power类及LightService类介绍
5.3.4 WakeLock总结
5.4 userActivity及Power按键处理分析
5.4.1 userActivity分析
5.4.2 Power按键处理分析
5.5 BatteryService及BatteryStatsService分析
5.5.1 BatteryService分析
5.5.2 BatteryStatsService分析
5.5.3 BatteryService及BatteryStatsService总结
5.6 本章学习指导
5.7 本章小结
第6章 深入理解ActivityManagerService
6.1 概述
6.2 初识ActivityManagerService
6.2.1 ActivityManagerService的main函数分析
6.2.2 AMS的 setSystemProcess分析
6.2.3 AMS的 installSystemProviders函数分析
6.2.4 AMS的 systemReady分析
6.2.5 初识ActivityManagerService总结
6.3 startActivity分析
6.3.1 从am说起
6.3.2 AMS的startActivityAndWait函数分析
6.3.3 startActivityLocked分析
6.4 Broadcast和BroadcastReceiver分析
6.4.1 registerReceiver流程分析
6.4.2 sendBroadcast流程分析
6.4.3 BROADCAST_INTENT_MSG消息处理函数
6.4.4 应用进程处理广播分析
6.4.5 广播处理总结
6.5 startService之按图索骥
6.5.1 Service知识介绍
6.5.2 startService流程图
6.6 AMS中的进程管理
6.6.1 Linux进程管理介绍
6.6.2 关于Android中的进程管理的介绍
6.6.3 AMS进程管理函数分析
6.6.4 AMS进程管理总结
6.7 App的 Crash处理
6.7.1 应用进程的Crash处理
6.7.2 AMS的handleApplicationCrash分析
6.7.3 AppDeathRecipient binderDied分析
6.7.4 App的Crash处理总结
6.8 本章学习指导
6.9 本章小结
第7章 深入理解ContentProvider
7.1 概述
7.2 MediaProvider的启动及创建
7.2.1 Context的getContentResolver函数分析
7.2.2 MediaStore.Image.Media的query函数分析
7.2.3 MediaProvider的启动及创建总结
7.3 SQLite创建数据库分析
7.3.1 SQLite及SQLiteDatabase家族
7.3.2 MediaProvider创建数据库分析
7.3.3 SQLiteDatabase创建数据库的分析总结
7.4 Cursor 的query函数的实现分析
7.4.1 提取query关键点
7.4.2 MediaProvider 的query分析
7.4.3 query关键点分析
7.4.4 Cursor query实现分析总结
7.5 Cursor close函数实现分析
7.5.1 客户端close的分析
7.5.2 服务端close的分析
7.5.3 finalize函数分析
7.5.4 Cursor close函数总结
7.6 ContentResolver openAssetFileDescriptor函数分析
7.6.1 openAssetFileDescriptor之客户端调用分析
7.6.2 ContentProvider的 openTypedAssetFile函数分析
7.6.3 跨进程传递文件描述符的探讨
7.6.4 openAssetFileDescriptor函数分析总结
7.7 本章学习指导
7.8 本章小结
第8章 深入理解ContentService和AccountManagerService
8.1 概述
8.2 数据更新通知机制分析
8.2.1 初识ContentService
8.2.2 ContentResovler 的registerContentObserver分析
8.2.3 ContentResolver的 notifyChange分析
8.2.4 数据更新通知机制总结和深入探讨
8.3 AccountManagerService分析
8.3.1 初识AccountManagerService
8.3.2 AccountManager addAccount分析
8.3.3 AccountManagerService的分析总结
8.4 数据同步管理SyncManager分析
8.4.1 初识SyncManager
8.4.2 ContentResolver 的requestSync分析
8.4.3 数据同步管理SyncManager分析总结
8.5 本章学习指导
8.6 本章小结
“深入理解Android”系列书籍的规划路线图

序言
前言:
本书主要内容及特色
本书是笔者“深入理解Android”系列的第二本,这一本将关注重点放在了Android Framework的Java层。在众多可供分析的知识点中,笔者另辟蹊径,选择了SystemServer中的服务(Service)作为主人公。这些Service大体可由图1来表示。

图1 SystemServer中的服务
由图1可知,SystemServer中的服务可划分为7大类共43项(包括Watchdog在内):
位于第一大类的是Android的核心服务,如ActivityManagerService、WindowManager-Service等。
位于第二大类的是和通信相关的服务,如Wifi的相关服务、Telephone的相关服务。
位于第三大类的是和系统功能相关的服务,如AudioService、MountService、UsbService等。
位于第四大类的是BatteryService、VibratorService等服务。
位于第五大类的是EntropyService、DiskStatsService、Watchdog等相对独立的服务。
位于第六大类的是蓝牙服务。
位于第七大类的是UI方面的服务,如状态栏服务、通知管理服务等。
以上这些服务就是Android Framework Java层的核心。毫不夸张地说,它们也是Android系统的基石。另外,这些服务的内容远非一本书所能囊括。作为Android Java层Framework分析的先头部队,本书涵盖了以下内容:
第1章,介绍了阅读本书需要做的一些准备工作,包括Android 4.0源码的下载和编译、Eclipse开发环境的搭建,以及Android系统进程(system_process)的调试等。
第2章,介绍了Java Binder和MessageQueue的实现。
第3章,介绍了SystemServer,并分析了图1中第五类包含的服务的工作原理。这些服务包括EntropyService、DropBoxManagerService、DiskStatsService、DeviceStorageMonitorService、SamplingProfilerService和ClipboardService。
第4章,分析了PackageManagerService,该服务负责Android系统中的Package信息查询和APK安装、卸载、更新等方面的工作。
第5章,讲解了PowerManagerService,它是Android中电源管理的核心服务。本章对其中的WakeLock、Power按键处理、BatteryStatsService和BatteryService都做了一番较为深入的分析。
第6章,以ActivityManagerService为分析重点,该服务是Android 的核心服务。本章对ActivityManagerService的启动、Activity的创建和启动、BroadcastReceiver的工作原理、Android中的进程管理等内容进行了较为深入的研究。
第7章,对ContentProvider的创建和启动、SQLite相关知识、Cursor query和close的实现等进行了较为深入的分析。
第8章,以ContentService和AccountManagerService为分析对象,介绍了数据更新通知机制的实现、账户管理和数据同步等方面的知识。
图1中的其他服务将会在“深入理解Android”系列的其他书中详细分析。该系列书的规划请见本书最后面的“深入理解Android系列图书路线图”。
本书以直接剖析源码的方式进行讲解,旨在引领读者一步步深入于Android系统中相关模块的内部原理,去理解它们是如何实现、如何工作的。在分析过程中,笔者根据个人研究Android代码的心得,采用了精简流程和逐个击破的方法。同时,笔者还提出了一些难度不大的知识点、相关的补充阅读资料,甚至笔者在实际项目中遇到的开放式问题,留给读者自行研究和探讨。总之,笔者希望读者在阅读完本书后,至少能有以下两个收获:
能从“基于Android并高于Android”的角度来看待和分析Android。
能初步具有大型复杂代码的分析能力。
读者对象
适合阅读本书的读者包括:
(1)Android应用开发工程师
虽然应用开发工程师平常接触的多是Android SDK,但是只有更深入地理解了Android系统运行原理,才能写出更健壮、更高效的模块。
(2)Android系统开发工程师
系统开发工程师常常需要深入理解系统的运转过程,而本书所涉及的内容正是他们在工作和学习中最想了解的。那些对具体服务(如ActivityManagerService、PackageManagerService)感兴趣的读者,也可以单刀直入,阅读本书相关章节。
(3)对Android系统运行原理感兴趣的读者
这部分读者需要具有基本的Android开发知识基础。
如何阅读本书
本书是针对Android源码进行分析的,而源码文件所在的路径一般都很长,例如,文件AndroidRuntime.cpp的真实路径是frameworks/base/core/jni/AndroidRuntime.cpp。为了行文方便,在各章节开头,均把本章涉及的源码路径全部列出,而在具体分析源码时,则只列出该源码的文件名。例如:
[-->AndroidRuntime.cpp]
//这里是源码和一些注释
另外,本书在描述类之间的关系及函数调用流程上,使用了UML的静态类图及序列图。UML是一个强大的工具,但它的建模规范过于烦琐,为更简单清晰地描述事情的本质,本书并未完全遵循UML的建模规范。这里仅举一例,如图2所示。


图2 UML示例图
在图2中:
外部类内部的方框用于表示内部类。另外,“外部类A.内部类B”也用于表示内部类。
接口和普通类用同一种框图表示。
本书所使用的UML图都比较简单,读者不必花费大量时间专门学习UML。
这里有必要提醒一下,要阅读此书,应具有Java基本知识。
另外,本书和《深入理解Android 卷I》(简称“卷I”)部分章节有一定联系,主要集中在Binder和MessageQueue部分。读者可将“卷I中”这部分内容作为补充阅读资料来学习。卷I部分内容的电子版下载地址为: http://download.csdn.net/detail/hzbooks/3677793。
本书涉及的Android 4.0源码以及一些开发工具的下载地址为:http://115.com/folder/fauqpj0t#Android-ICS-SOURCE-CODE。
勘误和支持
由于作者的水平有限,加之写作时间仓促,书中难免会出现一些错误或不准确的地方,恳请读者批评和指正。若有问题,可通过邮箱或在博客上留言与笔者共同讨论。笔者的联系方式是:
邮箱:fanping.deng@gmail.com
博客:blog.csdn.net/innost、cnblogs.net/innost和http://my.oschina.net/innost/blog
致谢
本书即将付梓!首先要感谢杨福川编辑的大力支持。另外,要感谢本书的审稿编辑姜影。
再一次感谢我所在的中科创达(ThunderSoft)公司。有幸工作在这样一个互相信任、互相鼓励、平等和开放式的环境中,我才能完成本书。公司领导所给予的机会和挑战,时时鞭策着我保持虚心学习的心态。此外,我所在团队的各位同仁也给予了我不少支持和帮助。本书出版之日,将是我们团队为之努力奋斗的Android系统高效、稳定运行于客户手机之时!
一如既往地感谢妻子和家人,他们是我奋斗的动力。
谢谢在人生和职业道路上曾给予我指导的诸位师长。
当然,最应感谢的还是肯花费宝贵时间和精力关注本书的读者,你们的意见和建议,将会使我获得巨大的精神财富!

邓凡平 于北京, 中科创达(ThunderSoft)公司

文摘
版权页:

深入理解Android:卷2

插图:

深入理解Android:卷2

2.IntentFilter介绍
“求职方”需要填写IntentFilter来表达自己的诉求。Android规定了3项内容。
Action:“求职方”支持的Intent动作(和Intent中的Action对应)。
Category:“求职方”支持的Intent种类(和Intent的Category对应)。
Data:求职方支持的Intent数据(和Intent的Data对应,包括URI和MIME类型)。
至此,猎头公司已有了需求,现在又有了求职者的信息,马上要做的工作就是匹配查询。在Android中,该工作被称为Intent Resolution。由于现在及未来人才都是最宝贵的资源,因此猎头公司在做匹配工作时,将以Intent Filter列出的3项内容为参考标准,具体步骤如下:
首先匹配IntentFilter的Action,如果Intent设置的Action不满足IntentFilter的Action,则匹配失败。如果IntentFilter未设定Action,则匹配成功。
然后检查IntentFilter的Category,匹配方法同Action的匹配,唯一有些例外的是Category为CATEGORY_DEFAULT的情况。
最后检查Data。Data的匹配过程比较烦琐,因为它和IntentFilter设置的Data内容有关,见接下来的介绍。
IntentFilter中的Data可以包括两个内容。
URI:完整格式为“scheme://host:port/path”,包含4个部分,scheme、host、port和path。其中host和port合起来标识URI authority,用于指明服务器的网络地址(IP加端口号)。由于uri最多可包含4个部分,因此要根据情况相应部分做匹配检查。Date type:指定数据的MIME类型。
要特别注意的是,uri中也可以携带数据的类型信息,所以在匹配过程中,还需要考虑uri中指定的数据类型。
提示关于具体的匹配流程,请读者务必阅读SDK docs/guide/topics/intents/intents-filters.html中的说明。
4.5.2 Activity信息的管理
前面在介绍PKMS扫描APK时提到,PKMS将解析得到的package私有的Activity信息加入到自己的数据结构mActivities中保存。

内容简介
《深入理解Android:卷2》是“深入理解Android”系列的第2本,第1本书上市后获得广大读者高度评价,在Android开发者社群内口口相传。《深入理解Android:卷2》不仅继承了第1本书的优点并改正了其在细微处存在的一些不足,而且还在写作的总体思想上进行了创新,更强调从系统设计者的角度去分析Android系统中各个模块内部的实现原理和工作机制。从具体内容上讲,重点是Android Framework的Java层,对Java层涉及的核心模块和服务进行了深入而细致的分析。通过《深入理解Android:卷2》,读者不仅能对Android系统本身有更深入的理解,而且还能掌握分析大型复杂源代码的能力。
《深入理解Android:卷2》共8章:第1章介绍了阅读本书所需要做的准备工作,包括Android 4.0源码的下载和编译、Eclipse环境的搭建,以及Android系统进程(system_process)的调试等;第2章对Java Binder和MessageQueue的实现进行了深入分析;第3章仔细剖析了SystemServer的工作原理,这些服务包括EntropyService、DropboxManagerService、DiskStatsService、DeviceStorageMonitorService、SamplingProfilerService和ClipboardService;第4章对系统中负责Package信息查询和APK安装、卸载、更新等工作的服务PackageManagerService进行了详细分析;第5章则对Android系统中负责电源管理的核心服务 PowerManagerService的原理进行了一番深入的分析;第6章以ActivityManagerService为分析重点,它的启动、Activity的创建和启动、BroadcastReceiver的工作原理、Android中的进程管理等内容展开了较为深入的研究;第7章对ContentProvider的创建和启动、SQLite、Cursor query和close的实现等进行了深入分析;第8章以ContentService和AccountManagerService为分析对象,介绍了数据更新通知机制的实现,以及账户管理和数据同步等相关知识。

海报:

深入理解Android:卷2

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多