Android应用程序进程启动过程

Android应用程序进程启动过程

学习《Android进阶解密》(刘望舒著)第三章,慕课网framework视频教程第三章

应用程序进程简介

要启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经启动。AMS在启动应用程序时会检查这个应用程序所需要的应用程序进程是否存在,不存在就会请求Zygote进程启动需要的应用程序进程。Zygote的Java框架层中会创建一个Server端的Socket,这个Socket用来等待AMS请求Zygote来创建新的应用程序进程。Zygote进程通过fork自身来创建应用程序进程,这样应用程序进程就会获得Zygote进程在启动时创建的虚拟机实例。当然,在应用程序进程创建过程中除了获取虚拟机实例外,还创建了Binder线程池和消息循环体,这样运行在应用程序中的应用程序就可以方便地使用Binder进行进程间通信及消息处理了。需要注意,此处讨论的是“应用程序进程启动过程”,而不是“应用程序启动过程”。

应用程序进程启动过程介绍

应用程序进程创建过程步骤较多,主要分为两大部分。

  1. AMS发送启动应用程序进程请求;
  2. Zygote接受请求并创建应用程序进程。

AMS发送启动应用程序进程请求

AMS Process ZygoteProcess ZygoteState start start startViaZygote zygoteSendArgsAndGetResult openZygoteSocketIfNeeded connect 与Zygote进程建立Socket连接 AMS Process ZygoteProcess ZygoteState

Zygote接收请求并创建应用程序进程

ZygoteInit ZygoteServer ZygoteConnection AndroidRuntime RuntimeInit ActivityThread runSelectLoop runOnce fork子进程 handleChildProc zygoteInit onZygoteInit 启动Binder线程池 applicationInit invokeStaticMain MethodAndArgsCaller main 此处会创建消息循环 ZygoteInit ZygoteServer ZygoteConnection AndroidRuntime RuntimeInit ActivityThread

总结

  1. 启动应用组件时,会先判断应用组件所在的进程是否启动,若没有则启动进程;
  2. AMS通过socket向zygote发起请求,启动进程;
  3. zygote fork出进程后,会执行ActivityThread的main函数;
  4. 进程启动之后会向AMS报告,注册ApplicationThread。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值