本文主要简单介绍一下 Android系统中启动的流程包括关键的api
1.Init进程
init的进程是Android系统启动的第一个进程,从名字上可以了解到 他承担了很多初始化的责任,启动过程是由bootLoader(引导程序)将系统os拉起来,等待系统内核完成系统设置后,在系统文件中找到init.rc文件。启动init进程。
init.rc是重要的配置文件 由Android的专属语言构建 是一个标签型组成,
里面比较重要的标签就是service 一般重要的系统服务都会在这里配置,系统会有专属的ServiceParser 去解析该service,解析成功后会将解析的service对象 放在一个链表的数据结构中,然后逐个启动。(文章中简化该过程 有很多系统启动的属性 包括具体怎么将链表中的service对应 感兴趣的 可以自己找一些详细的资料), 启动同时会将service的进程相关信息初始化 进程号 内存开辟占用等等
目前就简短的介绍了一下init进程,init进程启动后会将一个重要的服务进程zygote启动,下面我们再来简短的介绍一下zygote。
2.Zygote进程
zygote其实就是app_process 这样从名字上大家就可以看出这个进程的作用和关键 想Android的ART,Dalivk虚拟机,包括各种app进程,以及系统的关键服务,都是该进程创建的。
启动该进程时候 会根据不同的系统位数 来运行不同的init.zygote.rc 然后通过jni方法从native层进入到java层
总结一下 zygote进程总共做的事情
1.创建APPRuntime调用start方法,启动zygote进程
2.创建java虚拟机,注册jni方法
3.通过jni调用zygoteinit main方法进入zygote
4. 通过registerZygoteSocket创建服务端socket,通过runSelectedLoop等待AMS请求
5.启动SystemServer。