Android根Activity启动流程简述

序言

从我们点击屏幕上的应用icon,到该应用为你展示第一个可视界面,这个过程中,Android系统究竟做了什么操作?又涉及到哪些进程?
整个过程是相对复杂的,我们不可能花时间去琢磨透每一行源码的作用,这样会让我们迷失在源码的海洋之中。相反,我们应该重点去关注这个过程,从大的层面,去掌握这个过程。这样,进可以深入源码之洋。退可以知此原理。

一、根Activity启动过程 :
1. 从Launcher到AMS。

当我们点击屏幕上的应用icon时,Laucher发送启动应用的请求给AMS,因为Launcher是在Launcher进程,而AMS是在SystemServer进程。因此,实现这个请求。本质上,是在实现一个跨进程通信的功能。在安卓领域实现跨进程通信的技术有多种,像是Broadcast、ContentProvinder等。在系统领域,不敢说全部,但大部分的进程间通信技术都采用AIDL技术。Launcher发送请求成功后,启动应用的重担,就落到AMS头上了。

2. 从AMS到ApplicationThread。

收到Launcher创建应用的请求后,AMS会做以下几件事:

  • 检查调用者,是否有资格来创建应用。 比如,调用者的进程是否被隔离、是否有权限,是否有配置启动应用的理由说明。
  • 封装创建应用所需的相关信息。 比如,包名,apk的描述信息和启动的flag等。
  • 通过上面所封装的信息,来判断应用所在的任务栈、进程,是否存在,如果不存在,就创建新的。
  • 创建应用进程。 AMS并不直接创建应用进程,而是交给Zygote进程来创建。Zygote进程通过fork自身进程,来创建新的应用进程,这样可以让新的应用进程继承自己的相关权限。
  • 将启动Activity的信息,转发给ApplicationThread。 这又是一个跨进程的操作,从SystemServer进程到应用进程。
3. 从ApplicationThread到Activity。

ApplicationThread收到消息后,再通过H类(Handler,指向UI线程),将消息发送到UI线程,再在UI线程启动应用,接着调用onCreated方法,实现应用的启动。

二、涉及到的进程。

1,启动应用的请求,转接流程:Launcher =》AMS=》Zygote=》AMS=》Application。

2,上面流程,对应的进程:Launcher进程=》SystemServer进程=》Zygote进程=》SystemServer进程=》应用进程。

三、总结。
  1. Launcher在Launcher进程负责将启动应用的请求转发给AMS。
  2. AMS在SystemSever进程负责安全检查、启动应用的参数封装、通知Zygote进程创建应用进程、转发启动应用请求(并携带启动应用所需的参数)给应用进程。
  3. ActivityThread在应用进程,用AMS传过来的参数,启动根Activity,此时应用已被启动,对用户可见。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值