注:基于AndroidQ-10.0-API29
Launcher点击app icon
LauncherActivity.java
startActivity
Activity.java
startActivity
startActivityForResult
Instrumentation.java
execStartActivity
ActivityTaskManager.getService().startActivity
这里拿到ATMS在客户端的代理对象ActivityTaskManagerProxy,由此进入服务端System Server进程的ATMS服务
AMS通知Launcher进入pause
ActivityTaskManagerService.java
startActivity
startActivityAsUser
startActivityAsUser
ActivityStarter.java
execute
startActivityMayWait
startActivity
startActivity
startActivity
startActivityUnchecked
ActivityStack.java
resumeTopActivityUncheckedLocked
resumeTopActivityInnerLocked
startPausingLocked
ClientLifecycleManager.java
scheduleTransaction(…PauseActivityItem…)
ClientTransaction.java
schedule
这里拿到ApplicationThread在服务端的代理对象ApplicationThreadProxy,由此进入客户端Launcher进程
ActivityThread.java / ApplicationThread内部类
scheduleTransaction
ClientTransactionHandler.java
scheduleTransaction
sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);
ActivityThread.java
mH.sendMessage(msg);
mTransactionExecutor.execute(transaction);
TransactionExecutor.java
execute
executeCallbacks
item.execute
PauseActivityItem.java
execute
client.handlePauseActivity
ActivityThread.java
handlePauseActivity
performPauseActivity
performPauseActivityIfNeeded
mInstrumentation.callActivityOnPause
Instrumentation.java
callActivityOnPause
activity.performPause
Activity.java
performPause
onPause
TransactionExecutor.java
item.postExecute
PauseActivityItem.java
postExecute
ActivityTaskManager.getService().activityPaused(token)
这里拿到ATMS在客户端的代理对象ActivityTaskManagerProxy,由此进入服务端System Server进程的ATMS服务
Launcher通知AMS其进入pause后,AMS通知Zygote创建目标进程
ActivityTaskManagerService.java
activityPaused
stack.activityPausedLocked
ActivityStack.java
activityPausedLocke
completePauseLocked
mRootActivityContainer.resumeFocusedStacksTopActivities
RootActivityContainer.java
resumeFocusedStacksTopActivities
ActivityStack.java
resumeTopActivityUncheckedLocked
resumeTopActivityInnerLocked
mStackSupervisor.startSpecificActivityLocked
ActivityStackSupervisor.java
startSpecificActivityLocked
ActivityManagerInternal::startProcess
ActivityManagerService.java
class LocalService extends ActivityManagerInternal
startProcess
mProcessList.startProcessLocked
ProcessList.java
startProcessLocked
startProcessLocked
startProcessLocked
startProcessLocked
startProcess
Process.start
Process.java
ZYGOTE_PROCESS.start
ZygoteProcess.java
start
startViaZygote
zygoteSendArgsAndGetResult
attemptZygoteSendArgsAndGetResult
zygoteWriter.write(……)
Zygote进程fork出一个子进程,反射调用ActivityThread的main函数,至此目标进程启动
新进程启动,并通知AMS
ActivityThread.java
main
thread.attach(false, startSeq);
mgr.attachApplication(mAppThread, startSeq);
这里拿到AMS在客户端的代理对象ActivityManagerProxy,由此进入服务端System Server进程的AMS服务
AMS处理启动信息,并返回目标进程
ActivityManagerService.java
attachApplication
attachApplicationLocked
mAtmInternal.attachApplication
ActivityTaskManagerService.java
attachApplication
mRootActivityContainer.attachApplication
RootActivityContainer.java
mStackSupervisor.realStartActivityLocked
clientTransaction.addCallback(LaunchActivityItem.obtain(…), ….);
mService.getLifecycleManager().scheduleTransaction(clientTransaction);
ClientLifecycleManager.java
scheduleTransaction(…LaunchActivityItem…)
ClientTransaction.java
schedule
这里拿到ApplicationThread在服务端的代理对象ApplicationThreadProxy,由此进入客户端目标进程
目标进程收到启动通知,执行onCreate/onStart/onResume生命周期
ActivityThread.java / ApplicationThread内部类
scheduleTransaction
ClientTransactionHandler.java
scheduleTransaction
sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);
ActivityThread.java
mH.sendMessage(msg);
mTransactionExecutor.execute(transaction);
TransactionExecutor.java
execute
executeCallbacks
item.execute
LaunchActivityItem.java
client.handleLaunchActivity
ActivityThread.java
handleLaunchActivity
performLaunchActivity
//1.创建activity
activity = mInstrumentation.newActivity(……)
//2.创建application,执行application的onCreate方法
app = mInstrumentation.newApplication(……)
instrumentation.callApplicationOnCreate(app)
//3.执行activity的onCreate方法
activity.attach(创建Phonewindow)
activity.setTheme
mInstrumentation.callActivityOnCreate
Instrumentation.java
activity.performCreate
Activity.java
onCreate
setContentView
PhoneWindow.java
installDecor()
自此onCreate走完,接下来看何时走onStart,我们回到前面的TransactionExecutor.java在execute方法中执行了executeCallbacks之后,即执行完onCreate之后,会继续执行executeLifecycleState方法,继续跟踪代码:
TransactionExecutor.java
executeCallbacks(transaction);
executeLifecycleState(transaction);
cycleToPath
performLifecycleSequence
//当前状态ON_CREATE,final state为ON_RESUME
//得出这里进入ON_START
//执行完之后再进入ON_RESUME
for (int i = 0, state; i < size; i++) {
......
switch (state) {
case ON_CREATE:
mTransactionHandler.handleLaunchActivity(r, mPendingActions,null);
break;
case ON_START:
mTransactionHandler.handleStartActivity(r, mPendingActions);
break;
case ON_RESUME:
mTransactionHandler.handleResumeActivity(r.token, false ,r.isForward, "LIFECYCLER_RESUME_ACTIVITY");
break;
......
}
}
目标进程进入ON_RESUME状态
1.执行onResume
//ActivityThread
performResumeActivity
r.activity.performResume
//Instrumentation
mInstrumentation.callActivityOnResume(this);
//Activity
activity.onResume();
2.addview
//ActivityThread
handleResumeActivity
wm.addView(decor, l);
//WindowManagerImpl
mGlobal.addView
//WindowManagerGlobal
root = new ViewRootImpl(view.getContext(), display);
root.setView(view, wparams, panelParentView);
//ViewRootImpl
requestLayout();
mWindowSession.addToDisplay
3.添加IdleHandler,通知Launcher进入stop
//ActivityThread
Looper.*myQueue*().addIdleHandler(new Idler());
//Idler implements MessageQueue.IdleHandler
am.activityIdle(a.token, a.createdConfig, stopProfiling);
//ATMS
mStackSupervisor.activityIdleInternalLocked
//ActivityStackSupervisor
stack.stopActivityLocked(r);
//ActivityStack
mService.getLifecycleManager().scheduleTransaction(…StopActivityItem…);
//ClientLifecycleManager
scheduleTransaction(…StopActivityItem…)
//ClientTransaction
schedule
上同...
自此简单版的Activity启动分析完毕!
结尾
失眠必读系列未完待续,有任何错误,虚心讨教,欢迎指正...
参考资料:
www.jianshu.com/p/16e450f10…
blog.csdn.net/qian520ao/a…