文章基于API28本的activity启动过程,和26版本的启动过程改动不大,主要是在realStartActivityLocked方法之后,修改了activity的调用,读本文之前建议先了解之前版本activity的调用过程,文章将直接讲解主要不同之处。
Android应用程序(activity)启动过程(一)
Android应用程序(activity)启动过程(二)
对接启动过程(二) step 39或 step 50
- realStartActivityLocked()方法
// 启动LaunchActivityItem
clientTransaction.addCallback(LaunchActivityItem.obtain(new Intent(r.intent),
System.identityHashCode(r), r.info,
mergedConfiguration.getGlobalConfiguration(),
mergedConfiguration.getOverrideConfiguration(), r.compat,
r.launchedFromPackage, task.voiceInteractor, app.repProcState, r.icicle,
r.persistentState, results, newIntents, mService.isNextTransitionForward(),
profilerInfo));
final ActivityLifecycleItem lifecycleItem;
if (andResume) {
// 启动 ResumeActivityItem ActivityLifecycleItem
lifecycleItem = ResumeActivityItem.obtain(mService.isNextTransitionForward());
} else {
// 否则 启动 PauseActivityItem
lifecycleItem = PauseActivityItem.obtain();
}
// 利用 mLifecycleStateRequest 执行 resume方法
clientTransaction.setLifecycleStateRequest(lifecycleItem);
// Schedule transaction.启动事务
mService.getLifecycleManager().scheduleTransaction(clientTransaction);
- scheduleTransaction()
// ClientLifecycleManager 类
void scheduleTransaction(ClientTransaction transaction) throws