• 深入理解Android



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

    虽然前言位于书的最前面,但往往是最后才完成的。至今,《深入理解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相关的技术,以及高性能网络服务器和多核并行开发等 也有一定的研究。博客地址:http://www.cnblogs.com/innost/

    欲了解《深入理解Android:卷I》更多内容,可访问【互动网】【卓越网】【当当网】【豆瓣网】,或访问【作者博客】,谢谢大家!
  • 相关阅读:
    在Ubuntu下编译FFmpeg
    AirSim
    上海高分无人机大赛
    飞机维修流程
    心灵感应灯三 服务器端
    Kmeans基本思想
    小觅双目相机测试
    ORB SLAM2在Ubuntu 16.04上的运行配置
    Moleskine智能笔+专用本:写完随时传到手机
    机器学习培训
  • 原文地址:https://www.cnblogs.com/hzbook/p/2162402.html
Copyright © 2020-2023  润新知