Chinaunix首页 | 论坛 | 博客
  • 博客访问: 172829
  • 博文数量: 41
  • 博客积分: 1679
  • 博客等级: 上尉
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-24 10:24
文章分类

全部博文(41)

文章存档

2011年(34)

2010年(7)

分类: 嵌入式

2011-09-01 20:15:06

《深入理解Android:卷I》前言

虽然前言位于书的最前面,但往往是最后才完成的。至今,的撰写工作算是基本完成了,在书稿付梓之前,心中却有些许忐忑和不安,因为拙著可能会存在Bug。为此,我先为书中可能存在的Bug将给大家带来的麻烦致以真诚的歉意。另外,如果大家发现本书存在纰漏或有必要进一步探讨的地方,请发邮件给我(fanping.deng#gmail.com,请将#改为@), 我会尽快回复。非常乐意与大家交流。

本书主要内容

全书一共10章,其中一些重要章节中还设置了“拓展思考”部分。这10章的主要内容是:

第1章介绍了阅读本书所需要做的一些准备工作,包括对Android整个系统架构的认识,以及Android开发环境和源码阅读环境的搭建等。注意,本书分析的源码是Android2.2。

第2章通过Android源码中的一处实例深入地介绍了JNI技术。

第3章围绕init进程,介绍了如何解析init.rc以启动Zygote和属**(property service)的工作原理。

第4章剖析了zygote和system_server进程的工作原理。本章的拓展思考部分讨论了Andorid的启动速度、虚拟机heapsize的大小调整问题以及“看门狗”的工作原理。

第5章讲解了Android源码中常用的类,如sp、wp、RefBase、Thread类、同步类、Java中的Handler类以及Looper类。这些类都是Android中最常用和最基本的,只有掌握这些类的知识,才能在分析后续的代码时游刃有余。

第6章以MediaServer为切入点,对Binder进行了较为全面的分析。本章 拓展思考部分讨论了与Binder有关的三个问题,它们分别是Binder和线程的关系、死亡通知以及匿名Service。笔者希望,通过本章的学习,大 家能更深入地认识Binder的本质。

第7章阐述了Audio系统中的三位重要成员AudioTrack、AudioFlinger和AudioPolicyService的工作原理。本章拓展思考部分分析了AudioFlinger中 DuplicatingThread的工作原理,并且和读者一道探讨了单元测试、ALSA、Desktop check等问题。通过对本章的学习,相信读者会对Audio系统有更深的理解。

第8章以Surface系统为主,分析了Activity和Surface的关系、Surface和SurfaceFlinger的关系以及SurfaceFlinger的工作原理。本章的拓展思考部分分析了Surface系统中数据传输控制对象的工作原理、有关ViewRoot的一些疑问,最后讲解了LayerBuffer的工作流程。这是全书中难度较大的一章,建议大家反复阅读和思 考,这样才能进一步深入理解Surface系统。

第9章分析了Vold和Rild,其中Vold负责Android平台中外部存储设备的管理,而Rild负责与射频通信有关的工作。本章的拓展思考部分介绍了嵌入式系统中与存储有关的知识,还探讨了Rild和Phone设计优化方面的问题。

第10章分析了多媒体系统中MediaScanner的工作原理。在本章的拓展思考部分,笔者提出了几个问题,旨在激发读者深入思考和学习Android的欲望。

本书特色

笔者认为,本书最大的特点在于,较全面、系统、深入地讲解了Android系统中的几大重要组成部分的工作原理,旨在通过直接剖析源代码的方式,引领读者一步步深入于诸如Binder、Zygote、Audio、Surface、Vold、Rild等模块的内部,去理解它们是如何实现的,以及如何工作的。笔者根据研究Android代码的心得,在本书中尝试性地采用了精简流程、逐个击破的方法进行讲解,希望这样做能帮助读者更快、更准确地把握各模块的工作流程及其本质。本书大部分章节中都专门撰写了“拓展思路”的内容,希望这部分内容能激发读者对Android代码进行深入研究的热情。

本书面向的读者

(1)Android应用开发工程师

对于Android应用开发工程师而言,本书中关于Binder,以及sp、wp、Handler和Looper等常用类的分析或许能帮助你迅速适应Android平台上的开发工作。

(2)Android系统开发工程师

Android系统开发工程师常常需要深入理解系统的运转过程,而本书所涉及的内容可能正是他们在工作和学习中最想了解的。那些对具体模块(如Audio系统和Surface系统)感兴趣的读者也可以直接阅读相关章节的内容。

这里有必要提醒一下,要阅读此书,应具有C++的基本知识,因为本书的大部分内容都集中在了Native层。

如何阅读本书

本书是在分析Android源码的基础上展开的,而源码文件所在的路径一般都很长,例如,文件AndroidRuntime.cpp的真实路径就是framework/base/core/jni/AndroidRuntime.cpp。为了书写方便起见,我们在各章节开头把该章所涉及的源码路径全部都列出来了,而在具体分析源码时,则只列出该源码的文件名。

下面就是一个示例:

[-->AndroidRuntime.cpp]

//这里是源码分析和一些注释。

如有一些需要特别说明的地方,则会用下面的格式表示:

[-->AndroidRuntime.cpp::特别说明]

特别说明可帮助读者找到源码中的对应位置。

另外,本书在描述类之间的关系以及在函数调用流程上使用了UML的静态类图以及序列图。UML是一个强大的工具,但它的建模规范过于烦琐,为更简单清晰地描述事情的本质,本书并未完全遵循UML的建模规范。这里仅举一例,如图1所示。

图1:UML示例图

本书所使用的UML图都比较简单,读者大可不必花费时间专门学习UML。

本书的编写顺序,其实应该是6、5、4、7、8、9、10、2、3、1章,但出于逻辑连贯性的考虑,还是建议读者按本书的顺序阅读。其中,第2、5、6章分别讲述了JNI、Android常用类以及Binder系统,这些都是基础知识,我们有必要完全掌握。其他部分的内容都是针对单个模块的,例如Zygote、Audio、Surface、MediaScanner等,读者可各取所需,分别对其进行研究。

----------------------------------

作者简介:邓凡平,资深Android开发工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富。目前就职于国内一家领先的Android企业,负责Framework的开发和维护。乐于分享,活跃于CSDN等专业社区,撰写的Android Framework源码的系列文章深受读者欢迎。此外,他对Linux内核、C/C++/Python相关的技术,以及高性能网络服务器和多核并行开发等也有一定的研究。

欲了解《深入理解Android:卷I》更多内容,可访问【】【】【】【】,或访问【作者博客】,谢谢大家!
阅读(1462) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~