Android系统学习总结1--init和Zygote

本文详细解析Android系统从启动到初始化过程,包括Bootloader与Linux内核的交互,用户空间进程的启动,重点介绍了Init进程、Zygote进程的作用,以及系统服务的启动方式,同时探讨了ActivityManagerService如何接收并处理消息,还涉及了Android系统的看门狗机制,确保关键服务的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    根据书中介绍,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受看门狗监控

 

转载于:https://my.oschina.net/snail0/blog/317882

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值