搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
Android源码分析实录
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787302393290
  • 作      者:
    李忠良编著
  • 出 版 社 :
    清华大学出版社
  • 出版日期:
    2015
收藏
编辑推荐
  (1)讲解详尽,深入底层。
  《Android源码分析实录》详细讲解了Android网络开发的每一个知识点,为了更加说明原理,从深入底层开始,到顶层Java应用结束。即使菜鸟也能够看懂并掌握。
  (2)大话模式,趣味性更强。
  《Android源码分析实录》采用诙谐、生动的大话模式讲实例,在逼真的生活场景中学编程,区别于传统编程书的古板,使读者以快活的心情学习。将复杂的高深专业知识,以趣味性的语言讲解出来。
  (3)实例典型,提示丰富。
  《Android源码分析实录》中的实例都是最典型的,最能阐述知识点的应用。融合了技术中所有的经典范例,加深读者对知识的掌握。
  (4)高深内容的深层剖析,做到一一俱全。
  作为某项专业技术,用最合理的篇幅详细剖析了每个知识点,内容涉及了领域内的方方面面,可直接作为此领域的专业书籍。
展开
内容介绍
  Android是一款服务于智能手机和平板电脑等设备的操作系统,截止作者撰写此书时为止,Android在智能手机操作系统市场中已经占有75%的份额。为了让广大读者充分了解这款神奇的操作系统的架构原理,本书循序渐进地分析了Android系统核心源码的基本知识。
  《Android源码分析实录》共分为15章,主要内容包括走进Android世界、硬件抽象层详解、分析JNI(Java本地接口)层、Android内存系统分析、Android虚拟机系统详解、IPC通信机制详解、Zygote进程/System进程和应用程序进程、分析Activity组件、ContentProvider数据存储、Broadcast(广播)系统详解、多媒体系统详解、电源管理系统详解、输入系统驱动应用、蓝牙系统详解、网络系统详解等。
  《Android源码分析实录》几乎涵盖了Android源码中的所有核心系统的内容,全书内容通俗易懂,适合Android初学者、Android爱好者、Android底层开发人员、Android应用开发人员阅读和学习,也可以作为相关培训学校和大专院校相关专业的教学用书。
展开
精彩书摘
  第1章
  走进Android世界
  Android系统于2007年诞生,是一款建立在Linux内核之上的智能设备系统,是一款经典的手机、平板电脑等移动设备的软件解决方案。从2011年下半年开始到现在,Android系统在全球智能手机操作系统中的占有率一直位居第一。
  本章将简单介绍Android系统的发展历程和背景,让读者了解Android系统的发展之路,充分体验这款无与伦比的操作系统。
  1.1Android系统的优势
  为什么Google的Android(安卓)系统能够在短短4年内超越了Symbian(塞班)、Blackberry
  (黑莓)、iOS等前辈,从一名后起之秀变为移动智能设备市场占有率的大佬?这需要从Android系统的优势谈起,在本节的内容中,将为读者展示这些优势。
  1.1.1开源
  Google的Android出身于Linux世家,是一款开源的手机操作系统。正因为如此,在Android崭露头角之后,各大手机厂商和电信部门纷纷加入到了Android联盟中。这个联盟由业界内的公认大佬组成,主要成员包括Google、中国移动、摩托罗拉、高通和T-Mobile等在内的30多家技术和无线应用的领军企业。Android通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望通过建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。
  开源意味着对开发人员和手机厂商来说,Android是完全无偿免费使用的。正是因为源代码公开的原因,所以吸引了全世界各地无数程序员的热情。于是很多手机厂商都纷纷采用Android作为自己产品的系统,这当然也包括很多山寨厂商。因为免费,所以降低了成本,因而提高了利润。而对于开发人员来说,因为Android被众多移动设备产品所采用,所以这方面的人才也变得愈发抢手。于是有一些在别的系统上干得还可以的程序员也改行做Android开发,纷纷加入到Android开发大军中来,原因是待遇更好;另外,也有很多混得不尽如人意的程序员更是纷纷改行做Android手机开发,目的是想寻找自己程序员生涯的转机。
  而像本书作者这样遇到发展瓶颈的程序员,后来也决定做Android开发,因为这样可以学习一门新的技术,使自己的未来更加有保障。
  1.1.2强大的开发团队的支持
  Android的研发队伍阵容强大,包括Google、摩托罗拉、HTC(宏达电子)、Philips、T-Mobile、高通、魅族、三星、LG以及中国移动在内的34家企业,这些企业都基于Android平台开发手机的新型业务,并使应用之间的通用性和互联性在最大程度上得到保持。从硬件到软件开发机构,再到电信服务商,Android从一开始便成为业界内的宠儿,被当作新秀而重点培养,在强大的开发团队的培育和呵护下,顺利地功成名就,成为一方霸主。
  1.1.3开发人员的支持
  Google一直视程序员为前进的动力和源泉,为了提高程序员们的开发积极性,不但为开发人员提供了一流的开发装备和软件服务,而且还提出了振奋人心的奖励机制。
  具体的开发人员支持主要体现在如下三个方面。
  (1)可以迅速步入Android应用开发。在Android平台上,程序员可以开发出各式各样的应用。Android应用程序是通过Java语言开发的,只要具备Java开发基础,就能很快地上手并掌握。对于单独的Android应用开发来说,并没有很高的Java编程门槛,即使没有编程经验的门外汉,也可以在突击学习Java之后很快掌握Android编程。另外,Android完全支持2D、3D和数据库,并且与浏览器实现了集成。所以,通过Android平台,程序员可以迅速、高效地开发出绚丽多彩的应用,例如常见的工具、管理程序、互联网程序和游戏程序等。
  (2)可以参加奖金丰厚的Android大赛。为了吸引更多的用户使用Android开发,Google定期举办奖金为数千万美元的开发者竞赛,鼓励开发人员做出创意十足的软件。这种大赛对于开发人员来说,不但能磨练自己的开发水平,并且高额奖金本身也是吸引学习的动力。
  (3)可以加入自由经营的贸易市场。为了能让Android平台吸引更多的关注,Google提供了一个专门下载Android应用的门店:AndroidMarket,网址是https://play.google.com/store。在这个门店里面,允许开发人员发布应用程序,也允许Android用户下载自己喜欢的程序。作为开发者,需要申请开发者账号,申请后才能将自己的程序上传到AndroidMarket,并且可以对自己的软件进行定价。只要你的软件程序足够吸引人,就可以获得很好的回报。学习和赚钱两不误,我们何乐而不为呢?
  1.2Android系统架构介绍
  Android是一个移动设备的开发平台,其软件层次结构大体上包括操作系统(OS)、中间件(Middleware)和应用程序(Application)。
  Android操作系统的组件结构如图1-1所示。
  图1-1Android操作系统的组件结构
  根据Android操作系统的组件结构框图可知,其软件层次结构自下而上分为4层。
  (1)操作系统层(即Linux内核层)。
  (2)各种库(Libraries)和Android运行环境(Runtime)。
  (3)应用程序框架(ApplicationFramework)。
  (4)应用程序(Application)。
  1.2.1底层操作系统层(Linux内核层)
  因为Android源于Linux,使用了Linux内核,所以Android使用Linux2.6作为操作系统。Linux2.6是一种标准的技术,Linux也是一个开放的操作系统。Android对操作系统的使用包括核心和驱动程序两部分,Android的Linux核心为标准的Linux2.6内核,Android更多的是需要一些与移动设备相关的驱动程序。主要的驱动程序如下所示。
  ?显示驱动(DisplayDriver):是常用的基于Linux的帧缓冲(FrameBuffer)驱动程序。
  ?Flash内存驱动(FlashMemoryDriver):是基于MTD的Flash驱动程序。
  ?照相机驱动(CameraDriver):常用基于Linux的V4L(VideoforLinux)驱动程序。
  ?音频驱动(AudioDriver):常用基于ALSA(AdvancedLinuxSoundArchitecture,高级Linux声音体系)的驱动程序。
  ?Wi-Fi驱动(Wi-FiDriver):基于IEEE802.11标准的驱动程序。
  ?键盘驱动(KeyboardDriver):作为输入设备的键盘驱动程序。
  ?蓝牙驱动(BluetoothDriver):基于IEEE802.15.1标准的无线传输技术驱动程序。
  ?BinderIPC驱动:具有单独的设备节点,提供进程间通信功能的特殊驱动程序。
  ?PowerManagement(电源管理):用于管理电池电量等信息的驱动程序。
  1.2.2库(Libraries)和运行环境(Runtime)
  本层次对应一般的嵌入式系统,相当于中间件层次。Android的本层次分成两个部分,一个是各种库,另一个是Android运行环境。本层的内容大多是使用C语言实现的,其中包含了如下所示的各种库。
  ?C库:C语言的标准库,也是系统中一个最为底层的库,C库是通过Linux的系统调用实现的。
  ?多媒体框架(MediaFramework):这部分内容是Android多媒体的核心部分,基于PacketVideo(即PV)的Opencore,从功能上看,本库分为两大部分,一部分是音频、视频的回放(PlayBack),另一部分是则是音视频的记录(Recorder)。
  ?SGL:2D图像引擎。
  ?SSL:即SecureSocketLayer,位于TCP/IP协议与各种应用层协议之间,为数据通信提供安全支持。
  ?OpenGLES:提供了对3D的支持。
  ?界面管理工具(SurfaceManagement):提供管理显示子系统等功能。
  ?SQLite:一个通用的嵌入式数据库。
  ?WebKit:网络浏览器的核心。
  ?FreeType:位图和矢量字体的功能。
  在一般情况下,Android的各种库是以系统中间件的形式提供的,它们的显著特点是与移动设备平台的应用密切相关。
  另外,Android的运行环境主要是基于Dalvik(虚拟机)技术的。而Dalvik与一般的Java虚拟机(JavaVirtualMachine,JVM)是有如下区别的。
  ?Java虚拟机:执行的是Java标准的字节码(Bytecode)。
  ?Dalvik:执行的是Dalvik可执行格式(.dex)的文件。在执行的过程中,每一个应用程序即一个进程(Linux的一个Process)。
  二者最大的区别在于,JVM是基于栈的虚拟机(Stack-based),而Dalvik是基于寄存器的虚拟机(Register-based)。显然,后者最大的好处在于可以依据硬件实现更大的优化,这更适合移动设备的特点。
  1.2.3应用程序框架(ApplicationFramework)
  在整个Android系统中,与应用开发最相关的是ApplicationFramework,在这一层,Android为应用程序层的开发者提供了各种功能强大的APIs,这实际上是一个应用程序的框架。由于上层的应用程序是以Java构建的。在本层提供了程序中所需要的各种控件,例如:Views(视图组件)、List(列表)、Grid(栅格)、TextBox(文本框)、Button(按钮),甚至还有一个嵌入式的Web浏览器。
  一个基本的Android应用程序可以利用应用程序框架中的以下5个部分。
  ?Activity:活动。
  ?BroadcastIntentReceiver:广播意图接收者。
  ?Service:服务。
  ?ContentProvider:内容提供者。
  ?IntentandIntentFilter:意图和意图过滤器。
  1.2.4顶层应用程序(Application)
  Android的应用程序主要是用户界面(UserInterface)方面的,本层通常使用Java语言编写,其中还可以包含各种被放置在“res”目录中的资源文件。Java程序和相关资源在经过编译后,会生成一个APK包。Android本身提供了主屏幕(Home)、联系人(Contact)、电话(Phone)、浏览器(Browsers)等众多的核心应用。同时,应用程序的开发者还可以使用应用程序框架层的API实现自己的程序。这也是Android开源的巨大潜力的体现。
  注意:我们目的是分析Android系统的源码,因为涉及的知识面涵盖了所有上述4个层次,所以学习过程任重而道远。
  1.3核心组件
  一个典型的Android程序通常由5个组件组成,这5个组件构成了Android的核心功能。在分析Android4.3源码之前,本节将详细讲解Android应用程序的核心组件的基本知识。
  1.3.1Activity的界面表现
  Activities是这5个组件中最常用的一个组件。程序中Activity通常的表现形式是一个单独的界面(screen)。每个Activity都是一个单独的类,它扩展实现了Activity基础类。这个类显示为一个由Views组成的用户界面,并响应事件。大多数程序有多个Activity。例如,一个文本信息程序有这么几个界面:显示联系人列表界面、写信息界面、查看信息界面或者设置界面等。每个界面都是一个Activity。切换到另一个界面就是载入一个新的Activity。某些情况下,一个Activity可能会给前一个Activity返回值——例如,一个让用户选择相片的Activity会把选择到的相片返回给其调用者。
  打开一个新界面后,前一个界面就被暂停,并放入历史栈中(界面切换历史栈)。使用者可以回溯前面已经打开的存放在历史栈中的界面。也可以从历史栈中删除没有界面价值的界面。Android在历史栈中保留程序运行产生的所有界面:从第一个界面,到最后一个。
  1.3.2Intent和IntentFilters界面切换
  Android通过一个专门的Intent类来进行界面的切换。Intent描述了程序想做什么(Intent意为意图,目的,意向)。Intent类还有一个相关类IntentFilter。Intent是一个请求,用来明确做什么事情,IntentFilter则描述了一个Activity(或下文的IntentReceiver)能处理什么意图。显示某人联系信息的Activity使用了一个IntentFilter,就是说,它知道如何处理应用到此人数据的VIEW操作。Activities在文件AndroidManifest.xml中使用IntentFilters。
  通过解析Intents可以实现Activity的切换,我们可以使用startActivity(myIntent)启用新的Activity。系统会考察所有安装程序的IntentFilters,然后找到与myIntent匹配最好的IntentFilters所对应的Activity。这个新Activity能够接收Intent传来的消息,并因此被启用。解析Intents的过程发生在startActivity被实时调用时,这样做有如下两个好处:
  ?Activities仅发出一个Intent请求,便能重用其他组件的功能。
  ?Activities可以随时被替换为有等价IntentFilter的新Activity。
  1.3.3Service服务
  Service是一个没有用户界面(UI)且长驻系统的代码,最常见的例子是媒体播放器从播放列表中播放歌曲。在媒体播放器程序中,可能有一个或多个Activities让用户选择播放的歌曲。然而在后台播放歌曲时无需Activity干涉,因为用户希望在音乐播放的同时能够切换到其他界面。既然这样,媒体播放器Activity需要通过Context.startService()启动一个Service,这个Service在后台运行以保持继续播放音乐。在媒体播放器被关闭之前,系统会保持音乐后台播放Service的正常运行。可以用Context.bindService()方法连接到一个Service上(如果Service未运行的话,连接后还会启动它),连接后就可以通过一个Service提供的接口与Service进行通话。对音乐Service来说,提供了暂停和重放等功能。
  Android系统将会尝试保留那些启动了的或者绑定了的服务进程,具体说明如下。
  (1)如果该服务正在进程的onCreate()、onStart()或者onDestroy()这些方法中执行,那么主进程将会成为一个前台进程,以确保此代码不会被停止。
  (2)如果服务已经开始,那么它的主进程的重要性会低于所有的可见进程,但是会高于不可见进程。由于只有少数几个进程是用户可见的,所以,只要不是内存特别低,该服务就不会停止。
  (3)如果有多个客户端绑定了服务,只要客户端中的一个对于用户是可见的,就可以认为该服务可见。
  1.3.4用BroadcastIntentReceiver广播
  当要执行一些与外部事件相关的代码时,比如来电响铃时,或者到半夜时,就可能用到IntentReceiver。尽管IntentReceivers使用NotificationManager来通知用户一些好玩事情的发生,但没有用户界面。
  IntentReceivers可以在文件AndroidManifest.xml中声明,也可以用Context.registerReceiver()来声明。当一个IntentReceiver被触发时,如果需要,系统自然会自动启动程序。程序也可以通过Context.broadcastIntent()来发送自己的Intent广播给其他程序。
  1.3.5用ContentProvider存储
  在Android系统中,应用程序将数据存放在一个SQLite数据库格式的文件里,或者存放在其他有效设备里。如果想让其他程序能够使用我们程序中的数据,此时ContentProvider就很有用了。ContentProvider是一个实现了一系列标准方法的类,这个类使得其他程序能存储、读取某种ContentProvider可处理的数据。
  1.4进程和线程
  在Android系统中,进程和线程用于完成某个Android任务。当第一次运行某个组件的时候,Android会启动一个进程。在默认情况下,所有的组件和程序运行在这个进程和线程中,也可以安排组件在其他的进程或者线程中运行。在本节的内容中,将简要介绍Android系统中进程和线程的基本知识。
  1.4.1什么是进程
  组件运行的进程是由manifest文件控制的。组件的节点一般都包含一个process属性,例如、、和节点。
  属性process可以设置组件运行的进程,可以配置组件在一个独立进程中运行,或者多个组件在同一个进程中运行,甚至可以让多个程序在一个进程中运行,当然前提是这些程序共享一个UserID并给定同样的权限。另外,节点也包含了process属性,用来设置程序中所有组件的默认进程。
  当更加常用的进程无法获取足够的内存时,Android会智能地关闭不常用的进程。当下次启动程序的时候,会重新启动这些进程。
  当决定哪个进程需要被关闭的时候,Android会考虑进程对用户是否还有用。例如Android会倾向于关闭一个长期不显示在界面的进程来支持一个经常显示在界面的进程。是否关闭一个进程,决定于组件在进程中的状态。
  1.4.2什么是线程
  当用户界面需要快速对用户操作进行响应时,就需要将一些费时的操作,如网络连接、下载或者非常占用服务器时间的操作等放到其他线程中。也就是说,即使为组件分配了不同的进程,有时候也需要再分配线程。
  线程是通过Java的标准对象Thread来创建的,在Android中提供了如下管理线程的方法。
  (1)Looper可用来在线程中运行一个消息循环。
  (2)Handler可用来传递一个消息。
  (3)HandlerThread可用来创建一个带有消息循环的线程。
  (4)Android让一个应用程序在单独的线程中,直到它创建自己的线程。
  (5)应用程序组件(Activity、Service、BroadcastReceiver)全都在理想的主线程中实例化。
  (6)当被系统调用时,任何组件都不应该执行长时间或是阻塞的操作(例如网络调用或是计算循环),否则应该中断所有在该进程中的其他组件。
  (7)可以创建一个新的线程来执行长期操作。
  1.5获取Android4.3源码
  在分析Android4.3的源码之前,需要先获取其源码。因为目前市面上的主流操作系统是Windows、Linux和MacOS,由于MacOS属于类Linux系统,所以本节将讲解在Windows系统和Linux系统中获取Android源码的知识。
  1.5.1在Linux系统中获取Android源码
  在Linux系统中,通常使用Ubuntu来下载和编译Android源码。由于Android的源码内容很多,Google采用了git的版本控制工具,并对不同的模块设置不同的git服务器,我们可以用repo自动化脚本来下载Android源码,下面介绍如何一步一步地获取Android源码的过程。
  (1)下载repo
  在用户目录下,创建bin文件夹,用于存放repo,并把该路径设置到环境变量中去,命令如下:
  $mkdir~/bin
  $PATH=~/bin:$PATH
  下载repo的脚本,用于执行repo,命令如下:
  $curlhttps://dl-ssl.google.com/dl/googlesource/git-repo/repo>~/bin/repo
  设置可执行权限,命令如下:
  $chmoda+x~/bin/repo
  (2)初始化一个repo的客户端
  在用户目录下,创建一个空目录,用于存放Android源码,命令如下:
  $mkdirAndroidCode
  $cdAndroidCode
  进入到AndroidCode目录,并运行repo来下载源码,下载主线分支的代码,主线分支包括最新修改,以及并未正式发出版本的最新源码,命令如下:
  $repoinit-uhttps://android.googlesource.com/platform/manifest
  下载其他分支,即正式发布的版本,可以通过添加-b参数来下载,命令如下:
  $repoinit-uhttps://android.googlesource.com/platform/manifest-b
  android-4.2_r1
  ……
展开
目录

第1章  走进Android世界 1
1.1  Android系统的优势 2
1.1.1  开源 2
1.1.2  强大的开发团队的支持 2
1.1.3  开发人员的支持 2
1.2  Android系统架构介绍 3
1.2.1  底层操作系统层(Linux内核层) 4
1.2.2  库(Libraries)和运行环境(Runtime) 4
1.2.3  应用程序框架(ApplicationFramework) 5
1.2.4  顶层应用程序(Application) 5
1.3  核心组件 5
1.3.1  Activity的界面表现 5
1.3.2  Intent和IntentFilters界面切换 6
1.3.3  Service服务 6
1.3.4  用Broadcast IntentReceiver广播 7
1.3.5  用Content Provider存储 7
1.4  进程和线程 7
1.4.1  什么是进程 7
1.4.2  什么是线程 8
1.5  获取Android 4.3源码 8
1.5.1  在Linux系统中获取Android源码 8
1.5.2  在Windows平台上获取Android源码 9
1.6  Android源码结构分析 14
1.6.1  Android源码的目录结构 15
1.6.2  应用程序 16
1.6.3  应用程序框架 18
1.6.4  系统服务 19
1.6.5  系统程序库 21
1.6.6  系统运行库 24
1.6.7  硬件抽象层 25
1.7  编译Android源码 26
1.7.1  搭建编译环境 27
1.7.2  开始编译 27
1.7.3  在模拟器中运行 29
1.7.4  编译源码生成SDK 30
第2章  硬件抽象层详解 35
2.1  什么是HAL层 36
2.1.1  为什么把对硬件的支持划分为两层来实现 36
2.1.2  HAL层的位置结构 36
2.2  分析HAL Module架构 38
2.2.1  hw_module_t 39
2.2.2  hw_module_methods_t 40
2.2.3  hw_device_t 40
2.3  分析文件hardware.c 41
2.3.1  函数hw_get_module 41
2.3.2  数组variant_keys 41
2.3.3  载入相应的库 42
2.3.4  打开相应库并获得hw_module_t结构体 43
2.4  分析硬件抽象层的加载过程 44
2.5  分析硬件访问服务 48
2.5.1  定义硬件访问服务接口 48
2.5.2  实现硬件访问服务 49
2.6  分析mokoid工程 50
2.6.1  直接调用Service方法实现 51
2.6.2  通过Manager调用Service实现 56
2.7  分析HAL层的具体实现(以Sensor系统为例) 59
2.7.1  传感器系统的基础知识 59
2.7.2  HAL层的Sensor代码 60
2.7.3  Sensor编程的流程 61
第3章  分析JNI(Java本地接口)层 63
3.1  JNI基础 64
3.1.1  JNI的层次结构 64
3.1.2  JNI的本质 64
3.1.3  与JNI相关的文件 65
3.2  分析Java层 66
3.2.1  加载JNI库 66
3.2.2  实现扫描工作 68
3.2.3  读取并保存信息 69
3.2.4  删除不是SD卡中的文件信息 72
3.2.5  直接转向JNI 72
3.2.6  扫描函数scanFile 73
3.2.7  异常处理 73
3.3  分析MediaScanner的JNI层 74
3.3.1  将Native对象的指针保存到Java对象 75
3.3.2  创建Native层的MediaScanner对象 75
3.4  分析MediaScanner的Native层 76
3.4.1  注册JNI函数 76
3.4.2  完成注册工作 78
3.4.3  动态注册 80
3.4.4  处理路径参数 82
3.4.5  扫描文件 83
3.4.6  添加TAG信息 83
3.4.7  JNIEnv接口 85
3.4.8  JNI中的环境变量 86
3.5  JNI实例分析(基于Camera系统) 87
3.5.1  Java层预览接口 87
3.5.2  注册预览的JNI函数 89
3.5.3  C/C++层的预览函数 92
第4章  Android内存系统分析 95
4.1  Android的进程通信机制 96
4.1.1  Android的进程间通信(IPC)机制Binder 96
4.1.2  Service Manager是Binder机制的上下文管理者 97
4.2  分析Ashmem驱动程序 98
4.2.1  基础数据结构 98
4.2.2  初始化处理 99
4.2.3  打开匿名共享内存设备文件 101
4.2.4  内存映射 104
4.2.5  读写操作 105
4.2.6  锁定和解锁 107
4.2.7  回收内存块 113
4.3  分析C++访问接口层 115
4.3.1  接口MemoryHeapBase 115
4.3.2  接口MemoryBase 125
4.4  分析Java访问接口层 128
4.5  内存优化机制 132
4.5.1  sp和wp简析 132
4.5.2  详解智能指针 134
4.5.3  轻量级指针 136
4.5.4  强指针 139
4.5.5  弱指针 153
第5章  Android虚拟机系统详解 159
5.1  Android虚拟机基础 160
5.1.1  Android虚拟机源码目录 160
5.1.2  Dalvik的架构 161
5.1.3  Dalvik虚拟机的主要特征 163
5.1.4  Dalvik的进程管理 163
5.1.5  Android的初始化流程 163
5.2  分析Dalvik的运作流程 164
5.2.1  Dalvik虚拟机相关的可执行程序 164
5.2.2  初始化Dalvik虚拟机 167
5.2.3  启动Zygote 186
5.2.4  启动SystemServer进程 190
5.2.5  加载class类文件 193
5.3  Dalvik VM的内存系统 197
5.3.1  如何分配内存 197
5.3.2  分析内存管理机制的源码 199
5.4  分析Dalvik VM的启动过程 211
5.4.1  创建一个Dalvik VM实例 211
5.4.2  指定控制选项 212
5.4.3  创建并初始化Dalvik VM实例 220
5.4.4  创建JNIEnvExt对象 223
5.4.5  设置当前进程 229
5.4.6  注册Android核心类的JNI方法 229
5.4.7  使用线程创建javaCreateThreadEtc钩子 233
5.5  创建Dalvik VM进程 233
5.5.1  分析底层启动过程 234
5.5.2  创建Dalvik VM进程 234
5.5.3  初始化运行的Dalvik VM 238
第6章  IPC通信机制详解 241
6.1  Binder机制概述 242
6.2  分析Binder驱动程序 243
6.2.1  分析数据结构 243
6.2.2  分析设备初始化 255
6.2.3  打开Binder设备文件 257
6.2.4  内存映射 258
6.2.5  释放物理页面 264
6.2.6  分配内核缓冲区 264
6.2.7  释放内核缓冲区 267
6.2.8  查询内核缓冲区 269
6.3  Binder封装库 270
6.3.1  Binder库的实现层次 270
6.3.2  类BBinder 271
6.3.3  类BpRefBase 274
6.3.4  类IPCThreadState 275
6.4  初始化Java层Binder框架 279
第7章  Zygote进程、System进程和应用程序进程 283
7.1  Zygote(孕育)进程详解 284
7.1.1  Zygote基础 284
7.1.2  分析Zygote的启动过程 285
7.2  System进程详解 303
7.2.1  启动System进程前的准备工作 303
7.2.2  分析SystemServer 304
7.2.3  分析EntropyService 308
7.2.4  分析DropBoxManagerService 310
7.2.5  分析DiskStatsService 318
7.2.6  分析DeviceStorageManagerService 323
7.2.7  分析SamplingProfilerService 326
7.3  应用程序进程详解 336
7.3.1  创建应用程序 336
7.3.2  启动线程池 347
7.3.3  创建信息循环 348
第8章  分析Activity组件 351
8.1  Activity基础 352
8.1.1  Activity的状态 352
8.1.2  Activity的主要函数 353
8.2  启动Activity 355
8.2.1  Launcher启动应用程序 356
8.2.2  返回ActivityManagerService的远程接口 358
8.2.3  解析intent的内容 359
8.2.4  分析检查机制 363
8.2.5  执行Activity组件的操作 378
8.2.6  将Launcher推入Paused状态 386
8.2.7  处理消息 388
8.2.8  报告暂停 389
8.2.9  建立双向连接 394
8.2.10  启动新的Activity 400
8.2.11  发送通知信息 403
第9章  Content Provider数据存储 405
9.1  Content Provider基础 406
9.1.1  Content Provider在应用程序中的架构 406
9.1.2  Content Provider的常用接口 407
9.2  启动Content Provider 408
9.2.1  获得对象接口 408
9.2.2  存在校验 410
9.2.3  启动Android应用程序 416
9.2.4  根据进程启动Content Provider 416
9.2.5  处理消息 422
9.2.6  具体启动 423
9.3  Content Provider数据共享 427
9.3.1  获取接口 427
9.3.2  创建CursorWindow对象 430
9.3.3  数据传递 433
9.3.4  处理进程通信的请求 436
9.3.5  数据操作 442
第10章  Broadcast(广播)系统详解 447
10.1  Broadcast基础 448
10.2  发送广播信息 448
10.2.1  intent描述指示 449
10.2.2  传递广播信息 449
10.2.3  封装传递 450
10.2.4  处理发送请求 451
10.2.5  查找广播接收者 451
10.2.6  处理广播信息 455
10.2.7  检查权限 464
......

展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证