🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
本系列文章只为学习交流,切勿商业装载,查看原文可查看作者[官方博客](http://blog.csdn.net/Innost) ### 内容简介 《深入理解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”系列的第二本,这一本将关注重点放在了Android Framework的Java层。在众多可供分析的知识点中,笔者另辟蹊径,选择了SystemServer中的服务(Service)作为主人公。这些Service大体可由图1来表示。 ![SystemServer中的服务](https://box.kancloud.cn/20c66cb15bb9f57c8be3a725a7dd68cc_817x398.jpg =817x398) :-:   图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所示。 ![](https://s3.cn-north-1.amazonaws.com.cn/sitbweb-cn/content/B00BTCM8SA/resources/904055929) :-:   图2 UML示例图 在图2中: - 外部类内部的方框用于表示内部类。另外,“外部类A.内部类B”也用于表示内部类。 - 接口和普通类用同一种框图表示。   本书所使用的UML图都比较简单,读者不必花费大量时间专门学习UML。   这里有必要提醒一下,要阅读此书,应具有Java基本知识。   另外,本书和《深入理解Android 卷I》(简称“卷I”)部分章节有一定联系,主要集中在Binder和MessageQueue部分。读者可将“卷I中”这部分内容作为补充阅读资料来学习。