前言:邊分析,邊記錄 不斷更新
場景一、從桌面點擊APP圖示進行啟動
涉及到的核心行程:

step 1:
決議AndroidManifest檔案 組裝Intent物件
--> Activity --- startActivity
--> Activity --- startActivityForResult
--> Instrumentation --- execStartActivity
--- ActivityTaskManager.getService().startActivity 此處是通過Binder跨行程通信 去呼叫系統進 程SystemService 的ActivityMangerService 以下簡稱AMS
--> AMS --- startActivity
--> ActivityTaskManagerService --- startActivity 1043行
--> ActivityTaskManagerService --- startActivityAsUser 1068行
--> ActivityTaskManagerService --- startActivityAsUser 1077行
--- getActivityStartController().obtainStarter 這里得到了一個 ActivityStarter物件
--> ActivityStarter --- execute 628行
--> ActivityStarter --- executeRequest 835行 --- 1186行 startActivityUnchecked
--> ActivityStarter --- startActivityUnchecked 1512行
--> ActivityStarter --- startActivityInner 1587行
--> ActivityStarter --- startActivityInner 1587行 1731行
--> RootWindowContainer --- resumeFocusedStacksTopActivities 2285行
--> RootWindowContainer --- resumeFocusedStacksTopActivities 2289行 2299行
--> ActivityStack --- resumeTopActivityUncheckedLocked 1501行
--> ActivityStack --- resumeTopActivityInnerLocked 1532行 1961行
--> ActivityStackSupervisor --- startSpecificActivity 1961行
這里是核心代碼 是step 2 a 和 step 2 b的分支判斷的地方
void startSpecificActivity(ActivityRecord r, boolean andResume, boolean checkConfig) {
// Is this activity's application already running?
final WindowProcessController wpc =
mService.getProcessController(r.processName, r.info.applicationInfo.uid);
boolean knownToBeDead = false;
if (wpc != null && wpc.hasThread()) {
//step 2 b 當前APP行程已經存在 直接啟動對應Activity
try {
realStartActivityLocked(r, wpc, andResume, checkConfig);
return;
} catch (RemoteException e) {
Slog.w(TAG, "Exception when starting activity "
+ r.intent.getComponent().flattenToShortString(), e);
}
// If a dead object exception was thrown -- fall through to
// restart the application.
knownToBeDead = true;
}
r.notifyUnknownVisibilityLaunchedForKeyguardTransition();
final boolean isTop = andResume && r.isTopRunningActivity();
//step 2 a 當前APP行程不存在 呼叫 Zygote行程去fork APP行程
mService.startProcessAsync(r, knownToBeDead, isTop, isTop ? "top-activity" : "activity");
}
未完待續,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/287754.html
標籤:其他
下一篇:Android Studio新建BottomNavigationActivity后,fragment上部區域有空白的解決方法
