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通过jni控制service服务程序的简易流程
- Android(安卓)Wifi模块分析(三)
- Android之菜单总结
- Android使用Retrofit进行网络请求
- Android官方入门文档[1]创建一个Android项目
- android 创建桌面快捷方式 、插件
- Android(安卓)Activity的启动
- AIR Native Extension的使用(Android)一 : 打包ane
- 创建android逐帧动画的两种方式