Android 启动流程分析(一)

Android启动流程需要处理关键进程的启动,java世界的生成,各种服务的注册加载,还是比较复杂的。在实际应用中,我们常会遇到诸如,开机启动不了,启动时间过长,应用莫名崩溃的问题。分析启动流程,可以帮助我们快速定位这些问题,找到解决问题的思路。
二, Init 进程

  1. init简介
    Init进程是Android在用户空间的第一个进程,总的来说,它会解析init.rc配置文件,以及和机器相关的配置文件,执行各个阶段的动作,创建一些关键进程,尤其是和zygote进程,并初始化属性相关的资源,启动属性服务。最后进入一个无限循环,通过socket来接受信息,并执行相关动作,比如重启被杀死的zygote进程等。

三, Zygote 分析
1.从init.rc说起
先从Zygote 在init.rc中的部分说起,如下所示
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
class main
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
onrestart restart media
onrestart restart netd
onestart reastart

这个部分描述了Zygote对应的elf文件是 /system/bin/app_process. 同时还有一些参数。 Onrestart部分,顾名思议,就是定义了Zygote重启时需要执行的动作。 但是在系统启动的时候,通过ps查询却没有发现app_process的进程。这是因为app_process使用pctrl系统调用将自己的额名字换成了zygote.  Zygote对应的主程序代码在App_main.cpp中。 

2.Zygote诞生
在App_main

猜你喜欢

转载自blog.csdn.net/qq_42894864/article/details/104719137