美文网首页
Activity启动过程(startActivity)的源代码分

Activity启动过程(startActivity)的源代码分

作者: 王猛biu | 来源:发表于2018-10-25 20:20 被阅读16次

    源码方法

    1. 从Activity本地调用startActivity()--> Activity#startActivityForResult()

    2. Instrumentation#execStartActivity:Instrumentation类相当于一个管家,它的职责是管理各个应用程序和系统的交互,Activity都有此对象的实际引用,可以通过它监测系统与应用程序之间的所有交互。

    3.ActivityManagerProxy#startActivity():发起了一次跨进程调用,ActivityManagerService是ActivityManagerNative的具体实现。

    4.ActivityStarter():主要负责处理Activity的Intent和Flags, 还有关联相关的Stack和TaskRecord。

    ActivityStack.startActivityMayWait():获取Activity的启动信息,包括ResolveInfo和ActivityInfo,以及获取CallingPid和CallingUid;

    ActivityStack.startActivityLocked():创建一个ActivityRecord;

    ActivityStack.startActivityUnchecked():设置TaskRecord, 完成后执行ActivityStackSupervisor类的resumeFocusedStackTopActivityLocked方法

    5. ActivityStackSupervisorActivityStack:这里会判断进程是否存在和一些生命周期的方法

    ActivityStackSupervisor#resumeFocusedStackTopActivityLocked()

      --> ActivityStackSupervisor#resumeTopActivityUncheckedLocked():

        --> ActivityStack#resumeTopActivityInnerLocked()

          --> ActivityStackSupervisor#startSpecificActivityLocked()

    6:ApplicationThread:IApplicationThread的直接实现,发起了一次跨进程调用

    7:ActivityThread:会调用sendMessage,最后调用到mH.sendMessage(msg);

    8:ActivityThread#performLaunchActivity():会收集要启动的Activity的相关信息,主要是package和component信息,然后通过ClassLoader将要启动的Activity类加载出来。最后调用mInstrumentation.callActivityOnCreate()

    9:Activity#performStart():Activity的生命周期方法是通过Instrumentation类调用callActivityOnXXX方法最终调用Activity的onCreate等方法,调用时机为ActivityThread#performLaunchActivitiy()方法中。

    总结:

    一. 应用程序的MainActivity通过Binder进程间通信机制通知ActivityManagerService,它要启动一个新的Activity;

    二. ActivityManagerService通过Binder进程间通信机制通知MainActivity进入Paused状态;

    三. MainActivity通过Binder进程间通信机制通知ActivityManagerService,它已经准备就绪进入Paused状态,于是ActivityManagerService就准备要在MainActivity所在的进程和任务中启动新的Activity了;

    四. ActivityManagerService通过Binder进程间通信机制通知MainActivity所在的ActivityThread,现在一切准备就绪,它可以真正执行Activity的启动操作了。

    Instrumentation: 监控应用与系统相关的交互行为。

    AMS:组件管理调度中心,什么都不干,但是什么都管。

    ActivityStarter:处理Activity什么时候启动,怎么样启动相关问题,也就是处理Intent与Flag相关问题,平时提到的启动模式都可以在这里找到实现。

    ActivityStackSupervisior:这个类的作用你从它的名字就可以看出来,它用来管理Stack和Task。

    ActivityStack:用来管理栈里的Activity。

    ActivityThread:最终干活的人,是ActivityThread的内部类,Activity、Service、BroadcastReceiver的启动、切换、调度等各种操作都在这个类里完成。

    相关文章

      网友评论

          本文标题:Activity启动过程(startActivity)的源代码分

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