1. 將MainAcitvity組件的Action和Category名稱分別設(shè)置為"android.intent.action.MAIN"和"android.intent.category.LAUNCHER",使得它可以作為應(yīng)用程序Activity的根Activity組件。
2. 在Android系統(tǒng)中,所有的Activity組件都保存在一個堆棧中,其中后面啟動的位于前面啟動的上面。用戶在執(zhí)行一個操作時,通常需要與一系列相關(guān)的Activity組件進行交互,這些相關(guān)的Activity組件在系統(tǒng)的Activity堆棧中用一個任務(wù)(Task)來描述。
3.Laucher組件啟動MainAcitvity組件的過程如下所示








4. ActivityManagerService類有一個類型為ActivityStack的成員變量mMainStack,用來描述一個Activity組件堆棧。
5. 在ActivityManagerService中,每一個應(yīng)用程序進程都使用一個ProcessRecord對象來描述,并且保存在ActivityManagerService內(nèi)部。

6. ActivityStack類有三個成員變量mResumedActivity、mLastPausedActivity和mPausingActivity,它們的類型均為ActivityRecord,分別用來描述系統(tǒng)當(dāng)前激活的Activity組件、上一次被中止的組件以及正在被中止的組件。
7. ActivityRecord類有一個成員變量app,它的類型為ProcessRecord,用來描述一個Activity組件所運行在的應(yīng)用程序進程;而ProcessRecord類又有一個成員變量thread,它的類型為ApplicationThreadProxy,一個Binder代理對象,引用的是一個類型為ApplicationThread的Binder本地對象,即用代理對象來和應(yīng)用程序進程進行binder通信。
8. 在ActivityManagerService中,每一個Activity組件都有一個用戶ID和一個進程名稱;其中,用戶ID是在安裝該Activity組件時由packageManagerService分配的,而進程名稱則是在該Activity組件的android:process屬性來決定的。ActivityManagerService在啟動一個Activity組件時,首先會以它的用戶ID和進程名稱來檢查系統(tǒng)中是否存在一個對應(yīng)的應(yīng)用程序進程。如果存在,就會直接通知這個應(yīng)用程序進程將該Activity組件啟動起來;否則,就會先以這個用戶ID和進程名稱來創(chuàng)建一個應(yīng)用程序進程,然后再通知這個應(yīng)用程序進程將該Activity啟動起來。