Android版本:7.0(API27)bash
本篇文章的目的是为了从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中关键源码以下:spa
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和handleResumeActivity才是咱们后续分析须要重点关注的方法。code