Android控件系统(四)——浅析Activity启动过程

1,136 阅读1分钟

Android版本:7.0(API27)


  本篇文章的目的是为了从Activity的启动分析出各类事件的开始入口,例如PhoneWindow的创建、绘制流程、触摸事件分发、按键事件分发。这些内容后续文章我会一一分析,所以大家简单理解Activity的启动过程即可。
  Activity的启动我们从startActivity说起,下图是启动过程的函数调用路径:

Activity.startActivity()->
    startActivityForResult()->
Instrumentation.execStartActivity()->
ActivityManagerService.startActivity()->
    startActivityAsUser()->
ActivityStarter.startActivityMayWait()->
    startActivityLocked()->
        startActivity()->
            startActivity()->
                startActivityUnchecked()->
ActivityStackSupervisor.resumeFocusedStackTopActivityLocked()->
ActivityStack.resumeTopActivityUncheckedLocked()->
    resumeTopActivityInnerLocked()->
ActivityStackSupervisor.startSpecificActivityLocked()->
    realStartActivityLocked()->
ActivityThread.ApplicationThread.scheduleLaunchActivity()->
ActivityThread.handleLaunchActivity()->
    performLaunchActivity()
    handleResumeActivity()

  最后Activity的启动过程由ActivityThread的handleLaunchActivity来完成,handleLaunchActivity中关键源码如下:

private void handleLaunchActivity(ActivityClientRecord r, Intent customIntent, String reason){
    ....
    Activity a = performLaunchActivity(r, customIntent);
    ....
    handleResumeActivity(r.token, false, r.isForward,
                    !r.activity.mFinished && !r.startsNotResumed, r.lastProcessedSeq, reason);
}
  • 从上面的代码我们可以看到performLaunchActivity返回了一个Activity ,从这一点我们可以猜测方法中会完成PhoneWindow的创建、Activity窗口的创建,以及Activity生命周期onCreate、onStart回调;
  • handleResumeActivity完成Activity窗口的显示,以及Activity生命周期onResume的回调;

performLaunchActivity和handleResumeActivity才是我们后续分析需要重点关注的方法。