Android知识技术干货

Android init进程解析

2016-12-20  本文已影响127人  NoOneDev

作为天字第一号进程,如果想学习深入解析Android源码觉得还是有必要了解一下init的,虽然我看的懵懵懂懂。

天字一号就是PID=1的进程,可以通过PS命令查看。
工作:

解析配置文件

调用parse_config()方法解析
查找配置文件的section,然后针对不同的section使用不同的解析函数来解析。

section定义在keywords.h中,当symbol为on或service的时候表示section
zygote 也是一个service section

解析service
parse_service() //该函数只是搭建了一个service的架子
parse_line_service() //填充内容
zygote解析
init控制Service

** 启动zygote 服务**
init.rc中有这样一句话

#class_start 是一个COMMAND,对应的函数为do_class_start
class_start default

当init执行到

//将boot section 节的command加入到执行队列
action_for_each_trigger("boot",action_add_queue_tail);
//执行队列里的命令,class是一个COMMAND,多以它对应的是do_class_start会被执行

重启zygote

drain_action_queue(); //poll函数返回后,会进入下一轮的循环
restart_processes(); //这里会重启flag标志为SVC_RESTARTING的service.
属性服务

相当于windows下的注册表,系统重启或应用程序重启,可以根据注册表中属性,进行相应的初始化组工作。
查看属性

$ adb shell
$ getprop

property_init(); //属性初始化
property_set_fd = start_property_service(); //属性设置

当然init还有很多功能,比如说

参考书籍:
《深入解析Android 卷I》

上一篇下一篇

猜你喜欢

热点阅读