根Activity启动过程中涉及的进程
Posted 小图包
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根Activity启动过程中涉及的进程相关的知识,希望对你有一定的参考价值。
在Activity启动过程中间会涉及4个进程 分别是Zygote进程、Launcher进程、AMS所在进程(SystemServer进程)、应用进程。他们关系如下
首先Launcher进程向AMS请求请求创建根Activity,AMS 判断根Activity 所需的应用进程是否存在并启动,如果不存在就会请求Zygote进程创建应用程序,应用程序进程启动后,AMS会请求创建应用程序进程并启动Activity .步驟2 采用的Socket通信 步骤1 和步骤4 采用的Binder通信 时序图可以总结如下:
普通的Activity启动过程中间会涉及到两个进程
从应用程序中我们自己调用 startActivity(Intent intent) 会直接调用 Activity 如下代码:
//Activity.java
@Override
public void startActivity(Intent intent)
this.startActivity(intent, null);
执行内部重载 startActivity(intent, null); 函数
@Override
public void startActivity(Intent intent, @Nullable Bundle options)
判断是否有传参行为
if (options != null)
// 调用 Activity startActivityForResult 函数,将参数传递下去
startActivityForResult(intent, -1, options);
else
// Note we want to go through this call for compatibility with
// applications that may have overridden the method.
startActivityForResult(intent, -1);
在 应用程序根 Activity 启动过程#Launcher请求 AMS 过程 小节中,后面逻辑就完全一样了,所以不再将第二遍了。其中自己应用程序涉及到的进程就 2 个,一个是自己的应用程序进程,另一个就是 AMS 所在的 SystemServer 进程。
以上是关于根Activity启动过程中涉及的进程的主要内容,如果未能解决你的问题,请参考以下文章