概述
序言
从我们点击屏幕上的应用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进程=》应用进程。
三、总结。
Launcher在Launcher进程负责将启动应用的请求转发给AMS。
AMS在SystemSever进程负责安全检查、启动应用的参数封装、通知Zygote进程创建应用进程、转发启动应用请求(并携带启动应用所需的参数)给应用进程。
ActivityThread在应用进程,用AMS传过来的参数,启动根Activity,此时应用已被启动,对用户可见。
最后
以上就是酷酷水蜜桃为你收集整理的Android根Activity启动流程简述的全部内容,希望文章能够帮你解决Android根Activity启动流程简述所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复