Activity启动流程总结---通信流程

通信概述

Activity启动流程已经看完了,需要好好总结下。前面几篇描述Activity的启动流程是Activity所在应用进程未启动的情况下,直接点击Launcher界面的图标启动Activty的流,系统为android 4.1.2

Activity的启动流程中,涉及到的进程有三个,Launcher, 应用进程(下文以App表示)、ActivityManangerService。他们三个进程通过binder机制进行,本文不关心通信的细节,主要工作就是梳理下整个流程。
这里写图片描述

以上就是我总结的流程,时序图中并没有去一一列举启动流程中执行的函数,有些流程我用函数列举了出来,有些流程只是进行了描述。

通信流程

通过流程图可以发现,在启动的过程中,Launcher和AMS之间会有3此跨进程调用:

  • Launcher向AMS发起启动App请求,AMS收集需要启动的Activity的信息,判断是否进行task新建等操作
  • AMS通知Launcher可以执行onPause函数了,Launcher执行onPause函数
  • Launcher告知AMS,onPause函数已经执行完成

Launcher和AMS之间进行了3次的跨进程调用后,Launcher已经执行完了onPause函数,处于paused状态,接下来AMS就开始创建App的进程,启动Activity,这其中也涉及到3次跨进程调用:

  • AMS创建了App进程,通知新的App进程开始执行ActivityThread的main方法,创建消息循环
  • App执行完ActivityThread的main方法后,通知AMS执行attachApplication方法
  • AMS执行完attachApplication方法后,执行realStartActivity方法,并执行跨进程调用scheduleLauncheActivity

AMS执行跨进程调用scheduleLauncheActivity后,执行流就到了App所在的进程中,App开始最终通过执行performLaunchActivity执行了Activity的onCreate方法,最终Activity被启动。

本篇回顾了Activity启动过程中的通信流程,从下篇开始将复习下Activity启动过程中的一些细小的知识点。

猜你喜欢

转载自blog.csdn.net/rockstore/article/details/79900616