根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启动过程中涉及的进程的主要内容,如果未能解决你的问题,请参考以下文章

AMS和Activity启动过程

浅析Android Activity的启动过程

Android 中应用程序Activity的冷启动流程

Activity的启动流程这一篇够了

Activity启动流程

Activity的启动流程这一篇够了