Android核心服务解析篇(二)——Android源码结构分析

获得Android源码后,我们来分析源码结构。源码的全部工程分为如下三个部分。


①Core Project:核心工程部分,这是建立Android系统的基础,保存在根目录的各个文件夹中。

②External Project:扩展工程部分,可以使其他开源项目具有扩展功能,保存在external文件夹中。

③Package:包部分,提供了Android的应用程序,内容提供者,输入法和服务,保存在package文件夹中。


在获取的Android4.3源码目录中,包含了原始Android的目标机代码,主机编译工具和仿真环境。解压缩下载的Android4.3源码包后,第一级别目录结构的具体说明如下表所示:


表2-1 Android源码的根目录
根目录描述
abiabi相关代码,应用程序二进制接口
bionicbionic C库
bootable启动引导相关代码
build存放系统编译规则及generic等基础开发配置包
ctsAndroid兼容性测试套件标准
dalvikdalvik Java虚拟机
development应用程序开发相关代码
device设备相关代码
docs介绍开源的相关文档
externalAndroid使用的一些开源的模组
frameworks核心框架——Java及C++语言,是Android应用程序的框架
gdk即时通信模块
hardware主要是硬件适配层HAL代码
kernelLinux的内核文件
libcore核心库相关
libnativehelper                        是Support functions for Android's class libraries的别名,表示动态库,是实现JNI库的基础
ndkndk相关代码。Android NDK(Android Native Development Kit)是一系列的开发工具,允许程序开发人员在Android应用程序中嵌入C/C++语言编写的非托管代码
out编译完成后的代码输出在此目录
packages应用程序包
pdkPlug Development Kit的缩写,是本地开发套件
prebuilts               x86和ARM架构下预编译的一些资源
sdkSDK及模拟器
system文件系统和应用及组件,是用C语言实现的
tools工具文件夹
vendor厂商定制代码
Makefile全局的Makefile





































文件夹目录如下:





1.Android源码的目录结构


当下载好Android源码后,可以看到,第一级目录有18个文件夹和一个Makefile文件,如果是编译后的源码目录,会增加一个out文件夹,用来存放编译产生的文件,下面具体来分析一下这些目录各自的作用:


|——abi //应用程序的二进制接口

|——bionic //Android基础C库的源码

|——bootable //系统启动器的源码

|——build //编译和配置系统所需要的配置文件和脚本文件

|——cts //Android兼容性测试标准

|——dalvik //Android虚拟机源码

|——development //程序开发的模板和工具

|——device //设备相关代码

|——docs //开源的相关文档

|——external //Android使用的第三方开源库的源码

|——frameworks //应用程序框架源码

|——gdk //即时通信模块

|——hardware //硬件抽象层源码

|——libcore //相关核心库的代码

|——libnativehelper //动态库

|——ndk //NDK开发环境

|——packages //应用程序包

|——pdk //本地开发套件

|——prebuilt //x86和ARM架构下预编译的一些资源

|——sdk //SDK和模拟器相关代码

|——system //文件系统,应用和组件

|——Makefile //系统编译脚本


通过上面对源码根目录中的每个文件夹的介绍,可以看出源码是按照功能进行分类的,整个Android源码分为系统代码,工具,文档,开发环境,虚拟机,配置脚本和编译脚本等类别。


2.应用程序


在Android源码中,应用程序部分的功能是实现UI界面,开发人员基于SDK开发的APK包便属于应用程序层。应用程序层在Android系统中处于最顶层,Android 4.3源码结构中的packages目录用来实现系统的应用程序,此目录的具体结构如下所示:


packages /

|——apps //应用程序库

|——|——BasicSmsReceiver//基础短信接收

|——|——Bluetooth//蓝牙

|——|——Browser//浏览器

|——|——Calculator//计算器

|——|——Calendar//日历

|——|——Camera//照相机

|——|——CellBroadcastReceiver//单元广播接收

|——|——CertInstaller//被调用的包,在Android中安装数字签名

|——|——Contacts//联系人

|——|——DeskClock//桌面时钟

|——|——Email//电子邮件

|——|——Exchange//Exchange服务

|——|——Gallery//图库

|——|——Gallery2//图库2

|——|——HTMLViewer//HTML查看器

|——|——KeyChain//密码管理

|——|——Launcher2 //启动器

|——|——Mms//彩信

|——|——Music//音乐

|——|——MusicFX//音频增强

|——|——Nfc//近场通信

|——|——PackageInstaller//包安装器

|——|——Phone//电话

|——|——Protips//主屏幕提示

|——|——Provision//引导设置

|——|——QuickSearchBox//快速搜索框

|——|——Settings//设置

|——|——SoundRecorder//录音机

|——|——SpareParts//系统设置

|——|——SpeechRecorder//录音程序

|——|——Stk//sim卡相关

|——|——Tag//标签

|——|——VideoEditor//视频编辑

|——|——VoiceDialer//语音编号

|——experimental//非官方的应用程序

|——|——BugReportSender//Bug的报告程序

|——|——Bummer

|——|——CameraPreviewTest//照相机预览测试程序

|——|——DreaamTheater

|——|——ExampleImsFramework

|——|——LoaderApp

|——|——NotificationLog

|——|——NotificationShowcase

|——|——procstatlog

|——|——RpcPerformance

|——|——StrictModeTest

|——inputmethods//输入法

|——|——LatinIME//拉丁文输入法

|——|——OpenWnn//OpenWnn输入法

|——|——PinyinIME//拼音输入法

|——providers//提供器

|——|——ApplicationsProvider//应用程序提供器,提供应用程序所需的界面

|——|——CalendarProvider//日历提供器

|——|——ContactsProvider//联系人提供器

|——|——DownloadProvider//下载管理提供器

|——|——DrmProvider//数据库相关

|——|——GoogleContactsProvider//Google联系人提供器

|——|——MediaProvider//媒体提供器

|——|——TelephonyProvider//彩信提供器

|——|——UserDictionaryProvider//用户字典提供器

|——screensavers//屏幕保护

|——|——Basic//基本屏幕保护

|——|——PhotoTable//照片方格

|——|——WebView //网页

|——wallpapers//墙纸

|——|——Basic//系统内置墙纸

|——|——Galaxy4//S4内置墙纸

|——|——HoloSpiral//手枪皮套墙纸

|——|——LivePicker

|——|——MagicSmoke

|——|——MusicVisualization

|——|——NoiseField

|——|——PhaseBeam


通过上面的目录结构可以看出,在packages目录中包含了应用程序相关的包或者资源文件,不但包括系统自带的应用程序,也包括第三方开发的应用程序和屏幕保护和墙纸等应用。


3.应用程序框架


应用程序框架是Android系统中的核心部分,也就是SDK部分,它会提供接口给应用程序使用,同时应用程序框架又会与系统服务,系统程序库,硬件抽象层的关联,所以其作用十分重大,应用程序框架的实现代码大部分都在/frameworks/base和/frameworks/av目录下。


frameworks/base的目录结构如下所示:


frameworks/base

|——api //全是XML文件,定义了API

|——cmds //Android中的重要命令(am,app_proce等)

|——core //核心库

|——data //声音字体等数据文件

|——docs //文档

|——drm //数字版权管理

|——graphics //图形图像

|——icu4j //用于解决国际化问题

|——include //头文件

|——keystore //数字签名证书相关

|——libs //库

|——location //地理位置

|——media //多媒体

|——native //本地库

|——nfc-extras //NFC相关

|——obex //蓝牙传输

|——opengl //OpenGL相关

|——packages //设置,TTS,VPN程序

|——policy //锁屏界面相关

|——sax //XML解析器

|——services //Android服务

|——telephony //电话相关

|——test-runner //测试相关

|——tests //测试相关

|——tools //工具

|——voip //可视通话

|——wifi //无线网络


以上这些文件包含了应用程序框架层的大部分代码,正是这些目录下的文件构成了Android的应用程序框架层,暴露出接口给应用程序调用,同时衔接系统程序库和硬件抽象层,形成一个由上至下的调用过程。


4.系统服务


Android应用程序框架层的大部分实现代码被保存在/frameworks/base目录下,其实在这个目录中还有一个名为service的目录,里面的代码用于实现Android系统服务,其目录结构如下所示:


frameworks/base/services

|——common_time //日期时间相关的服务

|——input //输入系统服务

|——java //其他重要服务的Java层

|——jni //其他重要服务的JNI层

|——tests //测试相关


其中java和jni两个目录分别是一些其他的服务的Java层和JNI层实现,java目录下的目录结构以及其他Android系统服务的相关说明如下所示:


frameworks/base/services/java/com/android/server

|——accessibility

|——am

|——connectivity

|——display

|——dreams

|——drm

|——input

|——location

|——net

|——pm

|——power

|——updates

|——usb

\——wm

|——AlarmManagerService.java//闹钟服务

|——AppWidgetService.java//应用程序小工具服务

|——AppWidgetServiceImpl.java

|——AttributeCache.java

\——BackupManagerService.java//备份服务

|——BatteryService.java//电池相关服务

|——BluetoothManagerService.java//蓝牙

|——BootReceiver.java

|——BrickReceiver.java

|——CertBlacklister.java

|——ClipboardService.java

|——CommonTimeManagementService.java//时间管理服务

|——ConnectivityService.java

|——CountryDetectorService.java

|——DevicePolicyManagerService.java

|——DeviceStorageMonitorService.java//设备存储器监听服务

|——DiskStatsService.java//磁盘状态服务

|——DockObserver.java//底座监视服务

|——DropBoxManagerService.java

|——EntropyMixer.java

|——EventLogTags.logtags

|——INativeDaemonConnectorCallbacks.java

|——InputMethodManagerService.java//输入法管理服务

|——IntentResolver.java

|——IntentResolverOld.java

|——LightsService.java

|——LocationManagerService.java//地理位置服务

|——MasterClearReceiver.java

|——MountService.java//挂载服务

|——NativeDaemonConnector.java

|——NativeDaemonConnectorException.java

|——NativeDaemonEvent.java

|——NetworkManagementService.java//网络管理服务

|——NetworkTimeUpdateService.java

|——NotificationManagerService.java//通知服务

|——NsdService.java

|——PackageManagerBackupAgent.java

|——PreferredComponent.java

|——ProcessMap.java

|——RandomBlock.java

|——RecognitionManagerService.java

|——SamplingProfilerService.java

|——SerialService.java//NFC相关

|——ServiceWatcher.java

|——ShutdownActivity.java

|——StatusBarManagerService.java//状态栏管理服务

|——SystemBackupAgent.java

|——SystemService.java

|——TelephonyRegistry.java

|——TextServicesManagerService.java

|——ThrottleService.java

|——TwilightCalculator.java

|——TwilightService.java

|——UiModeManagerService.java

|——UpdateLockService.java//锁屏更新服务

|——VibratorService.java//震动服务

|——WallpaperManagerService.java//壁纸服务

|——Watchdog.java//看门狗

|——WifiService.java//无线网络服务

|——WiredAccessoryManager.java//无线设备管理服务


从上面的文件夹和文件可以看出,Android中涉及的服务种类有:界面,网络,电话等核心模块,这些专属服务是系统级别的服务,这些系统服务一般都会在Android系统启动的时候加载,在系统关闭的时候结束,受到系统的管理,应用程序并没有权力去打开或者关闭,它们会随着系统的运行一直在后台运行,供应用程序和其他组件来使用。


另外,在framework/av/目录下面有一个services目录,在此目录中存放的是音频和照相机的服务的实现代码,此目录的具体结构如下所示:


frameworks/av/services

|——audioflinger//音频管理服务

|——camera//照相机的管理服务


av/services目录主要用来支持Android系统中的音频和照相机服务。


5.系统程序库


Android4.3程序库的类型非常多,功能也非常强大。在接下来的内容中,将简要讲解Android4.3源码中的一些常用并且重要的系统程序库的知识。


㈠系统C库


Android系统采用的是一个从BSD继承而来的标准的系统函数库bionic,在源码根目录下有这个文件夹,其目录结构如下所示:


bionic/

|——libc//C库

|——libdl//动态链接库相关

|——libm //数学库

|——libstdc++ //C++实现库

|——libthread_db //线程库

|——linker //连接器相关

|——test //测试相关


㈡媒体库


Android中的媒体库在2.3版之前是由OpenCore实现的,2.3版之后Stragefright被替换了,OpenCore成为新的多媒体的实现库。同时Android自带了一些音视频的管理库,用于管理多媒体的录制,播放,编码和解码等功能。


Android的多媒体程序库的实现代码主要在/frameworks/av/media目录中,其目录结构如下:


frameworks/av/media/

|——common_time //时间相关

|——libeffects //多媒体效果

|——libmedia //多媒体录制,播放

|——libmedia_native //里面只有一个Android。迥,用来编译native文件

|——libmediaplayerservice//多媒体播放服务的实现库

|——libstagefright //Stagefright的实现库

|——mediaserver //跨进程多媒体服务

|——mtp //MTP协议的实现(媒体传输协议)


㈢图层显示库


Android中的图层显示库主要负责对显示子系统的管理,负责图层的渲染,叠加,绘制等功能,提供了2D和3D图层的无缝融合,是整个Android系统显示的“大脑中枢”,其代码在/frameworks/native/services/surfaceflinger/目录下,其目录结构如下所示:


frameworks/native/services/surfaceflinger/

|——DisplayHardware//显示底层相关

|——tests//测试

|——Android.mk//MakeFile文件

|——Barrier.h

|——Client.cpp//显示的客户端实现文件

|——Client.h

|——clz.cpp

|——clz.h

|——DdmConnection.cpp

|——DdmConnection.h

|——DisplayDevice.cpp//显示设备相关

|——DisplayDevice.h

|——EventThread.cpp//消息线程

|——EventThread.h

|——GLExtensions.cpp//OpenGL扩展

|——GLExtensions.h

|——Layer.cpp//图层相关

|——Layer.h

|——LayerBase.cpp//图层基类

|——LayerBase.h

|——LayerDim.cpp//图层相关

|——LayerDim.h

|——LayerScreenshot.cpp//图层相关

|——LayerScreenshot.h

|——MessageQueue.cpp//消息队列

|——MessageQueue.h

|——MODULE_LICENSE_APACHE2//证书

|——SurfaceFlinger.cpp//图层管理者,图层管理的核心类

|——SurfaceFlinger.h

|——SurfaceTextureLayer.cpp//文字图层

|——SurfaceTextureLayer.h

|——Transform.cpp

|——Transform.h


㈣网络引擎库


网络引擎库主要是用来实现Web浏览器的引擎,支持Android的Web浏览器和一个可嵌入的Web视图,这是采用第三方开发的浏览器引擎Webkit实现的,Webkit的代码在/external/webkit/目录下,其目录结构如下所示:


external/webkit/

|——Examples //Webkit的例子

|——LayoutTests//布局测试

|——PerformanceTests//表现测试

|——Source//Webkit源代码

|——Tools//工具

|——WebKitLibraries//Webkit用到的库

|——Android.mk//Makefile

|——bison_check.mk

|——CleanSpec.mk

|——MODULE_LICENSE_LGPL//证书

|——NOTICE

|——WEBKIT_MERGE_REVISION//版本信息


㈤3D图形库


Android中的3D图形渲染是采用OpenGL来实现的,OpenGl是开源的第三方图形渲染库,使用该库可以实现Android中的3D图形硬件加速或者3D图形软件加速功能,是一个非常重要的功能库。从Android 4.3开始,支持最新,最强大的OpenGL ES3.0.其实现代码在/frameworks/native/opengl中,其目录结构如下所示:


frameworks/native/opengl/

|——include //OpenGL中的头文件

|——libagl //在Mac OS上的库

|——libs //OpenGL的接口和实现库

|——specs //OpenGL的文档

|——tests //测试相关

|——tools //工具库


㈥SQLite


SQLite是Android系统自带的一个轻量级关系数据库,其实现源代码已经在网上开源。SQLite的优点是操作方便,运行速度较快,占用资源较少等,比较适合在嵌入式设备上面使用。SQLite是Android系统自带的实现数据库功能的核心库,其代码实现分为Java和C两个部分,Java部分的代码位于/frameworks/base/core/java/android/database,目录结构如下所示:


frameworks/base/core/java/android/database/

|——sqlite//SQLite的框架文件

|——AbstractCursor.java//游标的抽象类

|——AbstractWindowedCursor.java

|——BulkCursorDescriptor.java

|——BulkCursorNative.java

|——BulkCursorToCursorAdaptor.java//游标适配器

|——CharArrayBuffer.java

|——ContentObservable.java

|——ContentObserver.java

|——CrossProcessCursor.java

|——CrossProcessCursorWrapper.java//CrossProcessCursor的封装类

|——Cursor.java//游标实现娄

|——CursorIndexOutOfBoundsException.java//游标出界异常

|——CursorJoiner.java

|——CursorToBulkCursorAdaptor.java//适配器

|——CursorWindow.java//游标窗口

|——CursorWindowAllocationException.java//游标窗口异常

|——CursorWrapper.java//游标封装类

|——DatabaseErrorHandler.java//数据库错误句柄

|——DatabaseUtils.java//数据库工具类

|——DataSetObservable.java

|——DataSetObserver.java

|——DefaultDatabaseErrorHandle.java//默认数据库错误句柄

|——IBulkCursor.java

|——IContentObserver.aidl//aidl用于跨进程通信

|——MatrixCursor.java

|——MergeCursor.java

|——Observable.java

|——package.html

|——SQLException.java//数据库异常

|——StaleDataException.java


Java层的代码主要是实现SQLite的框架和接口的实现,使用户开发应用程序时能很简单地操作数据库,并且捕获数据库异常。


C++层的代码在/external/sqlite路径下,其目录结构如下所示:


external/sqlite/

|——android //Android数据库的一些工具包

|——dist //Android数据库底层实现


从上面Java和C部分的代码目录结构可以看出,SQLite在Android中还是有很重要的地位的,并且在SDK中会有开放的接口让应用程序可以很简单方便地操作数据库,对数据进行存储和删除。


6.系统运行库


众所周知,Android系统折应用层是采用Java开发的,由于Java语言的跨平台特性,Java代码必须运行在虚拟机中。正是因为这个特性,Android系统也自己实现了一个类似JVM但是更适用于嵌入式平台的Java虚拟机,这被称为dalvik。


dalvik功能等同于JVM,为Android平台上的Java代码提供了运行环境,dalvik本身是由C++语言实现的,在源码中的根目录下有dalvik文件夹,里面存放的是dalvik虚拟机的实现代码,其目录结构如下所示:


dalvik/

|——dalvikvm //入口目录

|——dexdump //dex反汇编

|——dexgen //dex生成相关

|——dexlist //dex列表

|——dexopt //与验证和优化

|——docs //文档

|——dvz //zygot相关

|——dx //dx工具,将多个Java转换为dex

|——hit

|——libdex //dex库的实现代码

|——opcode-gen

|——tests //测试相关

|——tools //工具

|——unit-tests //测试相关

|——vm //虚拟机的实现

|——Android.mk //Makefile

|——CleanSpec.mk

|——MODULE_LICENSE_APACHE2

|——NOTICE

|——README.txt


正是因为的上面这些代码实现的Android虚拟机,所以应用程序生成的二进制执行文件能够快速,稳定运行在Android系统上。


7.硬件抽象层


Android的硬件抽象是各种功能的底层实现,理论上,不同的硬件平台会有不同的硬件抽象层实现,这一个层次也是与驱动层和硬件层有紧密联系的,起着承上启下的作用,对上要实现应用程序框架层的接口,对下要实现一些硬件的基本功能,以及调用驱动层的接口。需要注意的是,这一层也是广大OEM厂商改动最大的一层,因为这一层的代码跟终端采用什么样硬件的硬件平台的很大的关系。源码中存放的是硬件抽象层框架的实现代码和一些平台无关的接口的实现。硬件抽象层代码在源码根目录下的hardware文件夹中,其目录结构如下所示:


hardware/

|——libhardware//新机制硬件库

|——libhardware_legacy//旧机制硬件库

|——ril//ril模块相关的底层实现


从上面的目录结构我们可以看出,硬件抽象层中主要是实现了一些底层的硬件库,用来实现应用层框架中的功能,至于其体硬件库中的哪些内容,我们可以继续分其目录结构,例如libhardware目录下的结构为:


hardware/libhardware/

|——include//入口目录

|——modules//dex反汇编

|——|——audio //音频相关底层库

|——|——audio_remote_submix//音频混合相关

|——|——gralloc //帧缓冲

|——|——hwcomposer //音频相关

|——|——local_time //本地时间

|——|——nfc //nfc功能

|——|——nfc-nci //nfc接口

|——|——power //电源

|——|——usbaudio //USB音频设备

|——|——Android.mk //Makefile

|——|——README.android

|——tests //dex生成相关

|——dexlist //dex列表

|——dexopt //验证和优化

|——docs //文档


从上面的目录结构我们可以分析出,libhardware目录主要是Android系统的某些功能的底层实现,包括audio,nfc,power。


libhardware_legacy目录与libhardware大同小异,只是针对旧的实现方式做的一套硬件库,其目录下还有uevent,wifi以及虚拟机的底层实现。这两个目录下的代码一般会由设备厂家根据自身的硬件平台来实现符合Android机制的硬件库。


ril目录下存放的是无线硬件设备与电话的实现,其目录结构如下所示:


hardware/ril/

|——include //头文件

|——libril //libril库

|——mock-ril

|——reference-ril //reference ril库

|——rild //ril守护进程

|——CleanSpec.mk


  • 12
    点赞
  • 11
    收藏
  • 打赏
    打赏
  • 8
    评论
Android系统源代码情景分析》随书光盘内容(源代码) 目录如下: 第1 初识Android系统 第1章 准备知识 1.1 Linux内核参考书籍 1.2 Android应用程序参考书籍 1.3 下载、编译和运行Android源代码 1.3.1 下载Android源代码 1.3.2 编译Android源代码 1.3.3 运行Android模拟器 1.4 下载、编译和运行Android内核源代码 1.4.1 下载Android内核源代码 1.4.2 编译Android内核源代码 1.4.3 运行Android模拟器 1.5 开发第一个Android应用程序 1.6 单独编译和打包Android应用程序模块 1.6.1 导入单独编译模块的mmm命令 1.6.2 单独编译Android应用程序模块 1.6.3 重新打包Android系统镜像文件 第2章 硬件抽象层 2.1 开发Android硬件驱动程序 2.1.1 实现内核驱动程序模块 2.1.2 修改内核Kconfig文件 2.1.3 修改内核Makefile文件 2.1.4 编译内核驱动程序模块 2.1.5 验证内核驱动程序模块 2.2 开发C可执行程序验证Android硬件驱动程序 2.3 开发Android硬件抽象层模块 2.3.1 硬件抽象层模块编写规范 2.3.2 编写硬件抽象层模块接口 2.3.3 硬件抽象层模块的加载过程 2.3.4 处理硬件设备访问权限问题 2.4 开发Android硬件访问服务 2.4.1 定义硬件访问服务接口 2.4.2 实现硬件访问服务 2.4.3 实现硬件访问服务的JNI方法 2.4.4 启动硬件访问服务 2.5 开发Android应用程序来使用硬件访问服务 第3章 智能指针 3.1 轻量级指针 3.1.1 实现原理分析 3.1.2 应用实例分析 3.2 强指针和弱指针 3.2.1 强指针的实现原理分析 3.2.2 弱指针的实现原理分析 3.2.3 应用实例分析 第2 Android专用驱动系统 第4章 Logger日志系统 4.1 Logger日志格式 4.2 Logger日志驱动程序 4.2.1 基础数据结构 4.2.2 日志设备的初始化过程 4.2.3 日志设备文件的打开过程 4.2.4 日志记录的读取过程 4.2.5 日志记录的写入过程 4.3 运行时库层日志库 4.4 C/C++日志写入接口 4.5 Java日志写入接口 4.6 Logcat工具分析 4.6.1 相关数据结构 4.6.2 初始化过程 4.6.3 日志记录的读取过程 4.6.4 日志记录的输出过程 第5章 Binder进程间通信系统 5.1 Binder驱动程序 5.1.1 基础数据结构 5.1.2 Binder设备的初始化过程 5.1.3 Binder设备文件的打开过程 5.1.4 Binder设备文件的内存映射过程 5.1.5 内核缓冲区管理 5.2 Binder进程间通信库 5.3 Binder进程间通信应用实例 5.4 Binder对象引用计数技术 5.4.1 Binder本地对象的生命周期 5.4.2 Binder实体对象的生命周期 5.4.3 Binder引用对象的生命周期 5.4.4 Binder代理对象的生命周期 5.5 Binder对象死亡通知机制 5.5.1 注册死亡接收通知 5.5.2 发送死亡接收通知 5.5.3 注销死亡接收通知 5.6 Service Manager的启动过程 5.6.1 打开和映射Binder设备文件 5.6.2 注册为Binder上下文管理者 5.6.3 循环等待Client进程请求 5.7 Service Manager代理对象的获取过程 5.8 Service组件的启动过程 5.8.1 注册Service组件 5.8.2 启动Binder线程池 5.9 Service代理对象的获取过程 5.10 Binder进程间通信机制的Java接口 5.10.1 Service Manager的Java代理对象的获取过程 5.10.2 Java服务接口的定义和解析 5.10.3 Java服务的启动过程 5.10.4 Java服务代理对象的获取过程 5.10.5 Java服务的调用过程 第6章 Ashmem匿名共享内存系统 6.1 Ashmem驱动程序 6.1.1 基础数据结构 6.1.2 匿名共享内存设备的初始化过程 6.1.3 匿名共享内存设备文件的打开过程 6.1.4 匿名共享内存设备文件的内存映射过程 6.1.5 匿名共享内存块的锁定和解锁过程 6.1.6 匿名共享内存块的回收过程 6.2 运行时库cutils的匿名共享内存访问接口 6.3 匿名共享内存的C++访问接口 6.3.1 MemoryHeapBase 6.3.2 MemoryBase 6.3.3 应用实例 6.4 匿名共享内存的Java访问接口 6.4.1 MemoryFile 6.4.2 应用实例 6.5 匿名共享内存的共享原理 第3 Android应用程序框架 第7章 Activity组件的启动过程 7.1 Activity组件应用实例 7.2 根Activity组件的启动过程 7.3 子Activity组件在进程内的启动过程 7.4 子Activity组件在新进程中的启动过程 第8章 Service组件的启动过程 8.1 Service组件应用实例 8.2 Service组件在新进程中的启动过程 8.3 Service组件在进程内的绑定过程 第9章 Android系统广播机制 9.1 广播机制应用实例 9.2 广播接收者的注册过程 9.3 广播的发送过程 第10章 Content Provider组件的实现原理 10.1 Content Provider组件应用实例 10.1.1 ArticlesProvider 10.1.2 Article 10.2 Content Provider组件的启动过程 10.3 Content Provider组件的数据共享原理 10.3.1 数据共享模型 10.3.2 数据传输过程 10.4 Content Provider组件的数据更新通知机制 10.4.1 注册内容观察者 10.4.2 发送数据更新通知 第11章 Zygote和System进程的启动过程 11.1 Zygote进程的启动脚本 11.2 Zygote进程的启动过程 11.3 System进程的启动过程 第12章 Android应用程序进程的启动过程 12.1 应用程序进程的创建过程 12.2 Binder线程池的启动过程 12.3 消息循环的创建过程 第13章 Android应用程序的消息处理机制 13.1 创建线程消息队列 13.2 线程消息循环过程 13.3 线程消息发送过程 13.4 线程消息处理过程 第14章 Android应用程序的键盘消息处理机制 14.1 键盘消息处理模型 14.2 InputManager的启动过程 14.2.1 创建InputManager 14.2.2 启动InputManager 14.2.3 启动InputDispatcher 14.2.4 启动InputReader 14.3 InputChannel的注册过程 14.3.1 创建InputChannel 14.3.2 注册Server端InputChannel 14.3.3 注册系统当前激活的应用程序窗口 14.3.4 注册Client端InputChannel 14.4 键盘消息的分发过程 14.4.1 InputReader获得键盘事件 14.4.2 InputDispatcher分发键盘事件 14.4.3 系统当前激活的应用程序窗口获得键盘消息 14.4.4 InputDispatcher获得键盘事件处理完成通知 14.5 InputChannel的注销过程 14.5.1 销毁应用程序窗口 14.5.2 注销Client端InputChannel 14.5.3 注销Server端InputChannel 第15章 Android应用程序线程的消息循环模型 15.1 应用程序主线程消息循环模型 15.2 与界面无关的应用程序子线程消息循环模型 15.3 与界面相关的应用程序子线程消息循环模型 第16章 Android应用程序的安装和显示过程 16.1 应用程序的安装过程 16.2 应用程序的显示过程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:酷酷鲨 设计师:CSDN官方博客 返回首页
评论 8

打赏作者

李元静

您的鼓励就是我创作的动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值