欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    深入理解andriod系统.docx

    • 资源ID:7222198       资源大小:101.93KB        全文页数:71页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    深入理解andriod系统.docx

    1、深入理解andriod系统内容简介:全书共10章,第1章介绍了阅读本书所需要做的准备工作,主要包括对Android系统架构和源码阅读方法的介绍;第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase

    2、、Thread等类,同步类,以及Java中的Handler类和Looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以MediaServer为切入点,对Android中极为重要的Binder进行了较为全面的分析,深刻揭示了其本质。第7章对Audio系统进行了深入的分析,尤其是AudioTrack、AudioFlinger和AudioPolicyService等的工作原理。第8章深入讲解了Surface系统的实现原理,分析了Surface与Activity之间以及Surface与SurfaceFlinger之间的关系、SurfaceFlinger的工作原理、Surface系

    3、统中的帧数据传输以及LayerBuffer的工作流程。第9章对Vold和Rild的原理和机制进行了深入的分析,同时还探讨了Phone设计优化的问题;第10章分析了多媒体系统中MediaScanner的工作原理。本书适合有一定基础的Android应用开发工程师和系统工程师阅读。通过对本书的学习,大家将能更深刻地理解Android系统,从而自如应对实际开发中遇到的难题。作者简介:邓凡平,资深Android开发工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富。目前就职于国内一家领先的Android企业,负责Framework

    4、的开发和维护。乐于分享,活跃于CSDN等专业社区,撰写的Android Framework源码的系列文章深受读者欢迎。此外,他对Linux内核、C/C+/Python相关的技术,以及高性能网络服务器和多核并行开发等也有一定的研究。博客地址:目 录 - 1. 深入理解Android:卷I推荐序2. 深入理解Android:卷I前言3. 深入理解Android:卷I目录4. 第5章 深入理解常见类5. 5.1 概述6. 5.2以“三板斧”揭秘RefBase、sp和wp7. 5.3Thread类及常用同步类分析8. 5.4Looper和Handler类分析深入理解Android:卷I推荐序 近两年来

    5、,IT行业的最热点聚焦到了移动互联网上。PC时代,WINTEL联盟成就了英特尔和微软各自的霸业。移动互联网时代,谁将上演新的传奇?新生的Android当年仅用短短一年多的时间就跻身全球智能操作系统的三甲行列。在北美市场,如今Android已经超过iOS和黑莓系统成为老大!Android势不可挡,ARM+Android组合的前景一片光明,越来越多的从业者加入了Android行列!与带给人们良好用户体验的iOS不一样的是,Android是一个开放的系统,其所有代码都是开源的。因此,对于开发者而言,不仅可以做到知其然,更可以做到知其所以然!然而,要想知道其所以然,并不是一件简单的事情。回想当初,我开

    6、始接触Android的时候,除了Android源码外,其他资料甚少。Android是基于Linux的完整操作系统,其代码量让人望而生畏。可以想象,在没有指导的情况下一头扎进操作系统庞大的代码中是一件让人多么痛苦的事情。时间过得很快,Android生态链已经得到了充分的发展。现在市场上的Android资料已经开始泛滥,书籍已经数不胜数。然而,绝大部分书籍只限于讲解Android应用的开发(拜Android应用API所赐),没有深入到系统级的探讨,极少的所谓提供Android深入指导的资料也只是浅尝辄止。如果想深入了解Android系统,只有华山一条路:自己看Android源代码!正是因为如此,当

    7、初凡平告诉我他要系统地整理其深入钻研Android源代码的心得时,我表示了强烈的赞同。这是一件极少有人做过的事情,这件事情将给已经或即将跨入Android世界的同仁们极大的帮助!这本书里,作者以代码框架为主线,用循序渐进的方式将框架中的关键点一一剖开,从而给读者一个架构清楚、细节完善的立体展现。另外,凡平还会用他的幽默给正在啃枯燥代码的您带来不少笑意和轻松。毫无疑问,如果您想深入了解Android系统,这本书就是您进入Android神秘世界的钥匙。如果您看准了移动互联网的前景,想深入理解Android,那就让这本书指导您前进吧!邓必山2011年6月于北京深入理解Android:卷I前言 虽然前

    8、言位于书的最前面,但往往是最后才完成的。至今,本书的撰写工作算是基本完成了,在书稿付梓之前,心中却有些许忐忑和不安,因为拙著可能会存在Bug。为此,我先为书中可能存在的Bug将给大家带来的麻烦致以真诚的歉意。另外,如果大家发现本书存在纰漏或有必要进一步探讨的地方,请发邮件给我,我会尽快回复。非常乐意与大家交流。本书主要内容全书一共10章,其中一些重要章节中还设置了“拓展思考”部分。这10章的主要内容是:第1章介绍了阅读本书所需要做的一些准备工作,包括对Android整个系统架构的认识,以及Android开发环境和源码阅读环境的搭建等。注意,本书分析的源码是Android2.2。第2章通过And

    9、roid源码中的一处实例深入地介绍了JNI技术。第3章围绕init进程,介绍了如何解析init.rc以启动Zygote和属性服务(property service)的工作原理。第4章剖析了zygote和system_server进程的工作原理。本章的拓展思考部分讨论了Andorid的启动速度、虚拟机heapsize的大小调整问题以及“看门狗”的工作原理。第5章讲解了Android源码中常用的类,如sp、wp、RefBase、Thread类、同步类、Java中的Handler类以及Looper类。这些类都是Android中最常用和最基本的,只有掌握这些类的知识,才能在分析后续的代码时游刃有余。第

    10、6章以MediaServer为切入点,对Binder进行了较为全面的分析。本章拓展思考部分讨论了与Binder有关的三个问题,它们分别是Binder和线程的关系、死亡通知以及匿名Service。笔者希望,通过本章的学习,大家能更深入地认识Binder的本质。第7章阐述了Audio系统中的三位重要成员AudioTrack、AudioFlinger和AudioPolicyService的工作原理。本章拓展思考部分分析了AudioFlinger中DuplicatingThread的工作原理,并且和读者一道探讨了单元测试、ALSA、Desktop check等问题。通过对本章的学习,相信读者会对Aud

    11、io系统有更深的理解。第8章以Surface系统为主,分析了Activity和Surface的关系、Surface和SurfaceFlinger的关系以及SurfaceFlinger的工作原理。本章的拓展思考部分分析了Surface系统中数据传输控制对象的工作原理、有关ViewRoot的一些疑问,最后讲解了LayerBuffer的工作流程。这是全书中难度较大的一章,建议大家反复阅读和思考,这样才能进一步深入理解Surface系统。第9章分析了Vold和Rild,其中Vold负责Android平台中外部存储设备的管理,而Rild负责与射频通信有关的工作。本章的拓展思考部分介绍了嵌入式系统中与存储

    12、有关的知识,还探讨了Rild和Phone设计优化方面的问题。第10章分析了多媒体系统中MediaScanner的工作原理。在本章的拓展思考部分,笔者提出了几个问题,旨在激发读者深入思考和学习Android的欲望。本书特色笔者认为,本书最大的特点在于,较全面、系统、深入地讲解了Android系统中的几大重要组成部分的工作原理,旨在通过直接剖析源代码的方式,引领读者一步步深入于诸如Binder、Zygote、Audio、Surface、Vold、Rild等模块的内部,去理解它们是如何实现的,以及如何工作的。笔者根据研究Android代码的心得,在本书中尝试性地采用了精简流程、逐个击破的方法进行讲解

    13、,希望这样做能帮助读者更快、更准确地把握各模块的工作流程及其本质。本书大部分章节中都专门撰写了“拓展思路”的内容,希望这部分内容能激发读者对Android代码进行深入研究的热情。本书面向的读者(1)Android应用开发工程师对于Android应用开发工程师而言,本书中关于Binder,以及sp、wp、Handler和Looper等常用类的分析或许能帮助你迅速适应Android平台上的开发工作。(2)Android系统开发工程师Android系统开发工程师常常需要深入理解系统的运转过程,而本书所涉及的内容可能正是他们在工作和学习中最想了解的。那些对具体模块(如Audio系统和Surface系统

    14、)感兴趣的读者也可以直接阅读相关章节的内容。这里有必要提醒一下,要阅读此书,应具有C+的基本知识,因为本书的大部分内容都集中在了Native层。如何阅读本书本书是在分析Android源码的基础上展开的,而源码文件所在的路径一般都很长,例如,文件AndroidRuntime.cpp的真实路径就是framework/base/core/jni/AndroidRuntime.cpp。为了书写方便起见,我们在各章节开头把该章所涉及的源码路径全部都列出来了,而在具体分析源码时,则只列出该源码的文件名。下面就是一个示例:-AndroidRuntime.cpp/这里是源码分析和一些注释。如有一些需要特别说明

    15、的地方,则会用下面的格式表示:-AndroidRuntime.cpp:特别说明特别说明可帮助读者找到源码中的对应位置。另外,本书在描述类之间的关系以及在函数调用流程上使用了UML的静态类图以及序列图。UML是一个强大的工具,但它的建模规范过于烦琐,为更简单清晰地描述事情的本质,本书并未完全遵循UML的建模规范。这里仅举一例,如图1所示:图1UML示例图如上图所示:画在外部类内部的方框用于表示内部类。接口和普通类用同一种框图表示。本书所使用的UML图都比较简单,读者大可不必花费时间专门学习UML。本书的编写顺序,其实应该是6、5、4、7、8、9、10、2、3、1章,但出于逻辑连贯性的考虑,还是建

    16、议读者按本书的顺序阅读。其中,第2、5、6章分别讲述了JNI、Android常用类以及Binder系统,这些都是基础知识,我们有必要完全掌握。其他部分的内容都是针对单个模块的,例如Zygote、Audio、Surface、MediaScanner等,读者可各取所需,分别对其进行研究。致谢首先要感谢杨福川编辑。本书最初的内容来自我的博客其次要感谢我的妻子。为写成此书,我几乎将周末所有的时间都花在了工作中,而长时间在生活上对妻子不闻不问。对丈夫呆若木鸡式的冷淡,妻子却给予了最大的宽容。另外,我的岳父母和我的父母亲都给予了我最无私的帮助,他们都是平凡而伟大的父母亲。还有我和妻子的亲戚们,他们的宽厚和

    17、善良时刻感动着我。在IT职业的道路上,非常感念前东家中科大洋公司的领导和同事们,他们是邓伟先生、刘运红先生、王宁先生等。当初,如果没有他们宽容的接纳和细心的指导,现在我不可能成为一名合格的程序员。非常感谢我现在供职的单位中科创达公司。在这里工作,我常有这样一种感慨:不是所有人都能自己开公司创业的,而又有多少人能够有机会和一个优秀的创业公司一起成长、一起发展呢?创达开明的领导、睿智而富有激情的工作伙伴正是孕育本书的沃土。公司领导赵鸿飞先生、吴安华女士等人更是给予了我最大的肯定和鼓励。这里要特别提及的是,我的大学同窗,即为本书作序的邓必山先生。如果没有他的推荐,凭自己那份简陋、单薄的简历,是根本无

    18、法与Android亲密接触的。另外,他还曾在技术和个人发展上给予过我很多的指导,对此,我将永志不忘!谢谢那些共享Android知识的网友们!没有大家前期点滴的奉献,或许我至今还在琢磨着某段代码呢。最后应感谢的是肯花费时间和精力阅读本书的读者,你们的意见和建议将会是我获得的巨大的精神财富!邓凡平2011年6月于北京深入理解Android:卷I目录 第1章阅读前的准备工作 / 11.1系统架构 / 21.1.1Android系统架构 / 21.1.2本书的架构 / 31.2搭建开发环境 / 41.3工具介绍 / 81.4本章小结 / 12第2章深入理解JNI / 132.1JNI概述 / 142.

    19、2学习JNI的实例:MediaScanner / 152.3Java层的MediaScanner分析 / 162.4JNI层MediaScanner的分析 / 172.5本章小结 / 32第3章深入理解init / 333.1概述 / 343.2init分析 / 343.3本章小结 / 60第4章深入理解zygote / 614.1概述 / 624.2zygote分析 / 624.3SystemServer分析 / 744.4zygote的分裂 / 844.5拓展思考 / 884.6本章小结 / 93第5章深入理解常见类 / 955.1概述 / 965.2以“三板斧”揭秘RefBase、sp和

    20、wp / 965.3Thread类及常用同步类分析 / 1095.4Looper和Handler类分析 / 1215.5本章小结 / 129第6章深入理解Binder / 1306.1概述 / 1316.2庖丁解MediaServer / 1326.3服务总管ServiceManager / 1526.4MediaPlayerService和它的Client / 1586.5拓展思考 / 1626.6学以致用 / 1666.7本章小结 / 172第7章深入理解Audio系统 / 1737.1概述 / 1747.2AudioTrack的破解 / 1747.3AudioFlinger的破解 / 2

    21、007.4AudioPolicyService的破解 / 2347.5拓展思考 / 2627.6本章小结 / 272第8章深入理解Surface系统 / 2738.1概述 / 2758.2一个Activity的显示 / 2758.3初识Surface / 2978.4深入分析Surface / 3108.5SurfaceFlinger分析 / 3538.6拓展思考 / 3778.7本章小结 / 394第9章深入理解Vold和Rild / 3959.1概述 / 3969.2Vold的原理与机制分析 / 3969.3Rild的原理与机制分析 / 4289.4拓展思考 / 4599.5本章小结 /

    22、463第10章深入理解MediaScanner / 46410.1概述 / 46510.2android.process.media分析 / 46510.3MediaScanner分析 / 47210.4拓展思考 / 48610.5本章小结 / 488 第5章 深入理解常见类 本章涉及的源代码文件名称及位置下面是本章分析的源码文件名和它的位置。RefBase.h(framework/base/include/utils/RefBase.h)RefBase.cpp(framework/base/libs/utils/RefBase.cpp)Thread.cpp(framework/base/li

    23、bs/utils/Thread.cpp)Thread.h(framework/base/include/utils/Thread.h)Atomic.h(system/core/include/cutils/Atomic.h)AndroidRuntime.cpp(framework/base/core/jni/AndroidRuntime.cpp)Looper.java(framework/base/core/Java/Android/os/Looper.java)Handler.java(framework/base/core/Java/Android/os/Handler.java)Hand

    24、lerThread.java(framework/base/core/Java/Android/os/HandlerThread.java)5.1 概述 初次接触Android源码时,见到最多的一定是sp和wp。即使你只是沉迷于Java世界的编码,那么Looper和Handler也是避不开的。本章的目的,就是把经常碰到的这些内容中的“拦路虎”一网打尽,将它们彻底搞懂。至于弄明白它们有什么好处,就仁者见仁,智者见智了。个人觉得Looper和Handler相对会更实用一些。 5.2以“三板斧”揭秘RefBase、sp和wp RefBase是Android中所有对象的始祖,类似于MFC中的CObje

    25、ct及Java中的Object对象。在Android中,RefBase结合sp和wp,实现了一套通过引用计数的方法来控制对象生命周期的机制。就如我们想像的那样,这三者的关系非常暧昧。初次接触Android源码的人往往会被那个随处可见的sp和wp搞晕了头。什么是sp和wp呢?其实,sp并不是我开始所想的smart pointer(C+语言中有这个东西),它真实的意思应该是strong pointer,而wp则是weak pointer的意思。我认为,Android推出这一套机制可能是模仿Java,因为Java世界中有所谓weak reference之类的东西。sp和wp的目的,就是为了帮助健忘的

    26、程序员回收new出来的内存。说明我还是喜欢赤裸裸地管理内存的分配和释放。不过,目前sp和wp的使用已经深入到Android系统的各个角落,想把它去掉真是不太可能了。这三者的关系比较复杂,都说程咬金的“三板斧”很厉害,那么我们就借用这三板斧,揭密其间的暧昧关系。5.2.1第一板斧初识影子对象我们的“三板斧”,其实就是三个例子。相信这三板斧劈下去,你会很容易理解它们。-例子1Cpp代码 1. /类A从RefBase派生,RefBase是万物的始祖。 2. class A:public RefBase 3. 4. /A没有任何自己的功能。 5. 6. int main() 7. 8. A* pA =

    27、 new A; 9. 10. /注意我们的sp、wp对象是在中创建的,下面的代码先创建sp,然后创建wp。 11. sp spA(pA); 12. wp wpA(spA); 13. /大括号结束前,先析构wp,再析构sp。 14. 15. /类A从RefBase派生,RefBase是万物的始祖。class A:public RefBase /A没有任何自己的功能。int main() A* pA = new A; /注意我们的sp、wp对象是在中创建的,下面的代码先创建sp,然后创建wp。 sp spA(pA); wp wpA(spA); /大括号结束前,先析构wp,再析构sp。 例子够简单吧

    28、?但也需一步一步分析这斧子是怎么劈下去的。1. RefBase和它的影子类A从RefBase中派生。使用的是RefBase构造函数。代码如下所示:-RefBase.cppCpp代码 1. RefBase:RefBase() 2. : mRefs(new weakref_impl(this)/注意这句话 3. 4. /mRefs是RefBase的成员变量,类型是weakref_impl,我们暂且叫它影子对象。 5. /所以A有一个影子对象。 6. RefBase:RefBase() : mRefs(new weakref_impl(this)/注意这句话 /mRefs是RefBase的成员变量,

    29、类型是weakref_impl,我们暂且叫它影子对象。 /所以A有一个影子对象。mRefs是引用计数管理的关键类,需要进一步观察。它是从RefBase的内部类weakref_type中派生出来的。先看看它的声明:Cpp代码 1. class RefBase:weakref_impl : public RefBase:weakref_type 2. /从RefBase的内部类weakref_type派生。 class RefBase:weakref_impl : public RefBase:weakref_type/从RefBase的内部类weakref_type派生。由于Android频繁使

    30、用C+内部类的方法,所以初次阅读Android代码时可能会有点不太习惯,C+的内部类和Java的内部类相似,但有一点不同,即它需要一个显式的成员指向外部类对象,而Java的内部类对象有一个隐式的成员指向外部类对象的。说明内部类在C+中的学名叫nested class(内嵌类)。-RefBase.cpp:weakref_imple构造Cpp代码 1. weakref_impl(RefBase* base) 2. : mStrong(INITIAL_STRONG_VALUE) /强引用计数,初始值为0x1000000。 3. , mWeak(0) /弱引用计数,初始值为0。 4. , mBase(base)/该影子对象所指向的实际对象。 5. , mFlags(0) 6. , mStrongRefs(NULL) 7. , mWeakRefs(NULL) 8. , mTrackEnabled(!DEBUG_REFS_ENABLED_BY_DEFAULT) 9. , mRetain(false) 10. 11. weak


    注意事项

    本文(深入理解andriod系统.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开