“深入理解Android”系列的卷I上市后,既叫好,又叫座,在Android开发者圈子里反响强烈。从Android源代码分析的角度来讲,该系列书从内容和分析方法上确实值得称道,不仅能体现作者的技术水准,而且能看出作者的用心良苦。在内容细节和作者自己对Android系统的认识深入程度上,卷II在卷I更上一层楼,内容更加精彩。不仅深入地分析了Java Framework层各种服务和模块的工作原理和实现机制,而且还理清了它们之间的关系。对于想提高Android开发水平的读者来说,本书值得反复研读。
《深入理解Android:卷2》内容简介
《深入理解Android:卷2》是“深入理解Android”系列的第2本,第1本书上市后获得广大读者高度评价,在Android开发者社群内口口相传。本书不仅继承了第1本书的优点并改正了其在细微处存在的一些不足,而且还在写作的总体思想上进行了创新,更强调从系统设计者的角度去分析Android系统中各个模块内部的实现原理和工作机制。从具体内容上讲,本书的重点是Android Framework的Java层,对Java层涉及的核心模块和服务进行了深入而细致的分析。通过本书,读者不仅能对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》前言
本书主要内容及特色
本书是笔者“深入理解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中”这部分内容作为补充阅读资料来学习。
。。。。。。
《深入理解Android:卷2》价格
《深入理解Android:卷2》目录
前言
第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”系列书籍的规划路线图
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。