美文网首页Android 面试Android高阶安卓
四大组件之Activity(一)-启动过程概览

四大组件之Activity(一)-启动过程概览

作者: Stan_Z | 来源:发表于2019-02-19 14:49 被阅读23次

    本文针对Activity的启动主线进行梳理。先捋大流程,后续再针对细节进行学习。

    一、概览关键流程
    form Gityuan

    启动流程关键主线梳理:

    1. 点击桌面App图标,Launcher进程采用Binder IPC向AMS发起startActivity请求;

    2. AMS接收到请求后,向zygote进程发送创建进程的请求,由Zygote进程fork出新的子进程,即App进程;

    3. App进程,通过Binder IPC向AMS发起attachApplication请求;

    4. AMS在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;

    5. App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;

    6. 主线程在收到Message后,创建目标Activity,并回调Activity.onCreate()等方法。

    到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。

    二、详细调用流程

    下面再看看详细的Activity启动流程(包括top activity切换与activity stop过程) :

    Activity启动主要牵扯到两个进程 :app进程 与 system_server进程。按Binder IPC切换划分为如下几个节点:

    1. app 触发activity的启动流程。
      点击桌面App图标,Launcher进程采用Binder IPC向AMS发起startActivity请求。

    2. system_server 接收activity启动请求,开始做一些前期准备工作。

    • 获取对应Activity,并对基本信息进行验证。
    • 根据launcheMode和Flag配置task。
    • 如果之前存在前台Acitivity,则让它先进入pause状态。
    1. app 让之前前台显示的activity进入pause状态。
      这部分很简单,看流程图就足够。

    4 system_server 进程准备。
    ActivityStackSupervisor #startSpecificActivityLocked
    判断当前要启动的activity所在的进程是否存在,如果不存在则创建进程。

    5 app ActivityThread 通过消息机制来处理Activity的Launch

    6 system_server activity stop时,调整task。

    7 app 通知app执行stop回调。

    三、执行流
    • Activity要通知系统进程
      Activity-->Instrumentation-->ActivityManagerNative—>
      Binder IPC 进入系统进程
      -->ActivityManagerService-->ActivityStackSupervisor/ActivityStack

    • 系统进程要管理Activity
      ApplicationThreadNative-->
      Binder IPC 进入App进程
      -->ActivityThread.ApplicationThread-->ActivityThread.H-->Instrumentation-->Activity

    • Activity A 启动 Activity B
      生命周期相关的整个过程是:a.onPause()-->b.onCreate()-->b.onStart()-->b.onResume()-->a.onStop()

    从整个Activity流程看,主要能拆分为如下几个关键段:

    1. Activity的task/stack管理
    2. Zygote fork 进程的过程
    3. 应用层Activity启动流程
      另外,starting Window流程也可以了解下。

    先写这么多,后续慢慢总结。

    相关文章

      网友评论

        本文标题:四大组件之Activity(一)-启动过程概览

        本文链接:https://www.haomeiwen.com/subject/uwtfyqtx.html