Android Framework启动流程分析(二)

    发展到今天,Android系统已经更新到O,对于Android系统和Framework的启动流程也有了一些变化。为了完善Android Framework启动流程分析(一)中描述,紧跟Android发展。本文章对于部分逻辑做了补充。

    如果想阅读完整的Android Framework启动流程,请阅读《Android Framework启动流程分析(一)》。

1. ZygoteConnection:runOnce()返回值说明

    此函数是Zygote进程fork应用进程的主要实现,包括读取socket客户端命令,并fork出child进程。
    此函数3个重要的返回值:
    throw Zygote.MethodAndArgsCaller
         child进程fork成功,在child进程中抛出此exception,然后invoke应用的main函数。
    return TRUE:
         child进程fork成功,在当前进程(新fork进程的parent进程)调用handleParentProc把child进程pid写会client端,正常返回,关闭并移除本次fork。
    return FALSE:
         child进程fork失败,等待下次尝试fork。

 2. parent进程和fork出的child进程说明

    调用Zygote.forkAndSpecialize fork进程时,会fork出新的VM instance和进程(地址空间、堆栈等)。所以调用此函数后当前进程和fork出的child进程先后返回。  
     1)pid = 0 : child进程返回
         调用handleChildProc执行子进程逻辑:最终调用RuntimeInit:invokeStaticMain进入ActivityThread:main和应用Loop循环。
     2)pid > 0 : 父进程返回
         调用handleChildProc把child进程pid写会client端,正常返回。

 3. SystemServer进程核心Service启动

     加载android_servers本地库后,直接在main thread中启动Framework的各种服务。SystemServer在Android的运行环境中扮演了"神经中枢"的作用,启动各种系统服务线程,这些系统服务都是以一个线程的方式存在于SystemServer进程中,并统一addService到ServiceManager中供应用层调用。
     核心服务中,ActivityManagerService、AccountManagerService、PackageManagerService、NetworkPolicyManagerService和PowerManagerService都要自己独立的消息循环。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值