Activity 启动时序图

本时序图是基于Android 8.0的源码绘制的,参考了《Android 开发艺术探索》,对Activity的启动流程进行了熟悉

Activity 启动时序图_第1张图片 Activity 启动流程图

 

Activity的启动其实是有两种情况的,
         第一种是从桌面上的icon图标,点击进入;
         第二种是在代码中通过 startActivity(Intent)的方式启动的;本文档是介绍的这种方式;

入口:startActivity(...)方法, 最终会调用到startActivityForResult(...)中;
          然后调用了 Instrumentain 类中的 execStartActivity方法;到目前为止,整个操作都是在
          APP自己的进程中;然后开始与AMS打交道(这里开始跨进程通信),接着调用了AMS的
          startActivity方法,然后跟着时序图流程一直到ActivityStackSupervisor的realStartActivitylocked方法中,
          在这段过程中都是在AMS的进程里面;接着调用了ApplicaitonThread的scheduleLaunchActivity方法,ApplicationThread
          是ActivityThread的一个内部类,它是binder的一个实现类;AMS和ApplicationThread的交互实际上是
          跨进程的通信,scheduleLaunchActivity方法发出了一个HandlerMsg,ActivityThread的handleLaunchActivity方法
          处理,调用了performLauchActivity,最终里面是调用了Instrumentain 的newActivity 通过classLoader去加载了一个
          新的Activity,然后调用onCreat,onStart,onResume等方法;注意的是,onResume调用之后,window才去update
          的,所以onResume里面也获取不到view的相关信息;

建议:跟着时序图然后去带着源码走一遍;个人能力有限,难免会有错误,给我留言,及时修正。

你可能感兴趣的:(Android-随笔知识)