Android系统学习总结1--init和Zygote
根据书中介绍,Android就是一个类Linux的系统,先分析Android的启动,Android启动刚开始跟Linux启动一样,就是boot跟着Linux内核,跟着就是开始了Linux的用户空间进程的启动,下面就开始跟着系统的启动过程,跟着书本学习。
Init就是系统中用户空间的第一个进程,它的进程号就是1,init进程作为天字第一号进程,有很多重要的功能:
解析init.rc和init.**.rc,完成init.rc提供的动作
创建java世界的开创者zygote,
初始化Android系统的属性,加载Android系统的属性服务
Zygote进程的名字是后来换了的,刚开始进程名称叫做app_process,所以Zygote的native入口函数在app_main.cpp中
我们来看下Zygote是怎么成为java世界的创建者的,Zygote的main函数的大部分工作都是AndroidRuntime的start函数来实现的,这里创建了java世界。
创建虚拟机--startVm
为这个虚拟机注册需要的jni函数
通过jni调用之后就进入了java世界,不调用就不用回到native世界
那我们来看java世界的入口,在zygoteinit.java的main,
建立ipc通信服务端,registerZygoteSocket这里没有用到binder,用的是socket通信
预加载类和资源,都是Androidframework中的
通过fork启动system_server进程,这个进程是framework的核心,如果它dead了,Zygote就会dead掉。
system_server启动完成后,成为一个独立的进程,Zygote就进入循环接收客户端socket的通信(谁是客户端呢)
surfaceFlinger服务在system_server进程中被创建。
system_server进程创建了一个线程,来启动系统的各项服务,如电源管理,电池管理,看门狗,windowmanager等
通过分析ActivityManagerService来看Zygote怎么接收消息,并处理请求的
AMS也是由SystemServer创建的,是创建管理activity的过程。
AMS启动一个activity,是SystemServer通过Zygote的那个socket先给Zygote发送一个消息
Zygote一个在等待消息的状态,获取到消息后通过fork又创建了一个子进程,Zygote继续等待消息
Android系统的看门狗watchdog
Android用看门狗看几个重要的Service,一旦发现Service除了问题,就杀掉SS,进而Zygote也会自杀,之后java世界重启
ActivityManagerService PowerManagerService WindowManagerService受看门狗监控
更多相关文章
- android 如何调用系统拨打电话的功能
- frameworks中增加自定义服务使其也成为系统服务
- Android系统开发01—Android基本组件
- Linux/Android——Input系统之InputMapper 处理 (八)
- [置顶] android 进程的优先级
- [Android实例] 基于android的远程视频监控系统
- Android的图表世界–如何使用MPAndroidChart
- Android存储系统之架构篇