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才是我们后续分析需要重点关注的方法。