1.linux内核,加载linux内核
2 init 进程对各种设备进行初始化,
执行Daemon进程,管理USB、ADB链接管理器、Debugger系统、rild管理无线通信链接
Content Manager进程,提供运行Android各种系统服务信息
Media Server
Zygote进程用于缩短Android应用程序加载时间,每当Java应用程序时,Zygote就会派生出一个子进程来执行应用程序的虚拟机
System Server进程 Zygote进程创建,在Android启动过程中位于Zygote之后,运行的System Server提供给上层调用需要先将它注册到Content Manager中
将Java层与C/C++有机的联系起来,使得他们互相协调,共同完成某个任务
java中调用C库
1,编写java代码
2,编译java代码 javac
3,生成C语言头文件
4,编写C代码
5,生成C共享库
6,运行java程序
java虚拟机使用函数原型将java代码和C代码映射到一起 javah
调用JNI代码。C调 java
1,创建java对象
2,访问静态成员域
3,调用类的静态方法
4,访问Jjava对象成员变量
5,访问Java对象的方法
1,运行时会初始化虚拟机,并启动它
AppRuntime继承自AndroidRuntime用于初始化并运行虚拟机
registerZygoteSocket() 用于处理请求创建应用时fork进程
加载Framework中的类和平台资源preloadClasses()和preloadResources()
运行SystemServer
runSelectLoopMode() 进入循环,处理来自所绑定的套接字的请求
服务有Android系统服务,应用服务两种
系统服务由Framework提供
应用服务由开发者继承并实现Service类后开发出来的
应用服务分为:本地服务,远程服务,区分方式是是否运行在同一个进程中
系统服务分为:本地系统服务,Java系统服务
本地系统服务(Audio Flinger 混合多种音频数据,并发送到耳机,扬声器,Surface Flinger 组合各种应用程序的Surface渲染到Frame Buffer),
Java系统服务分为:核心平台服务,硬件服务
核心平台服务
Activity Manager Service:管理所有的Activity的生命周期与堆栈
Window Manager Service, 位于Surface Flinger之上,将要绘制的机器画面上的内容传递给Surface Flinger
Package Manager Service 加载apk文件的信息,提供信息显示系统中设置的哪些包
硬件服务(用于控制底层硬件)
Alarm Manager Service 定时器
Connectivity Service 提供有关网络当前状态的信息
Location Service 提供终端当前位置的信息
Power Service 设备电源管理
Sensor Service 传感器感应值
Telephony Service 电话服务
Wifi Service 控制无线网状态
系统服务初始化代码
系统服务需要把相关信息注册到Context Manager中,以便Android应用程序在能够使用其提供的服务
主要术语定义
Android Binder Driver
从进程的角度看服务使用
IPC过程分为服务注册,服务检索,服务使用
服务注册 Service Server 与 Context Manager间的IPC
服务检索 服务客户端与Context Manager间的IPC
服务使用 服务客户端与Service Server IPC
从Binder的角度看服务的使用
Context Manager(服务注册,服务检索)
使用C语言编写,以便使其与Binder Driver紧密衔接
Native Service Manager
Service Server与Service Manager的关系
Java Service Framework
服务生成:Java服务方法有两种,1,继承Binder,aidl语言。2,继承Service开发
第一种,Java系统服务将服务注册到Context Manager中,然后通过Service Manager使用服务
第二种,Java应用程序服务由Activity Manager Service进行管理
Java Service Manager
Java系统服务运行分析
Activity Manager Service 创建Activity 服务 广播等,并管理他们的生命周期
Zygote创建进程后会把ActivityThread加载到新进程中 会创建Application和ActivityThread和loop
ActivityThread调用attachApplication()与ActivityManagerService建立连接 应用请求服务
ActivityThread通过attach建立ActivityManagerService连接 服务请求应用