1. 程式人生 > >Android app從安裝到啟動的過程

Android app從安裝到啟動的過程

APK為AndroidPackage的縮寫
應用安裝涉及到如下幾個目錄:
system/app------系統自帶的應用程式
data/app -------使用者程式安裝的目錄,安裝時把apk檔案複製到此目錄
data/data ------存放應用程式的資料
data/dalvik-cache-----將apk中的dex檔案安裝到dalvik-cache目錄下
安裝過程
複製apk安裝包到data/ap目錄下,解壓並掃描安裝包,把dex檔案儲存到dalvik-cache目錄,並data/data目錄下
建立對用的應用資料目錄。

刪除安裝:
刪除安裝過程中在上述三個目錄下建立的檔案及目錄。

安裝過程(PackageManagerService的處理):

PackageManagerService處理各種應用的安裝,解除安裝,管理等工作
PackageManagerService服務啟動的流程:
(1)從apk,xml中載入package資訊,儲存到內部成員變數中,用於後面的查詢。關鍵的方法是scanPackageList
(2)各種查詢操作,包括query Intent操作

(3)install package和delete package操作,還有後面的關鍵方法是installPackageList()

App啟動過程


ActivityManagerService組織回退棧時以ActivityRecord為基本單位,所有的ActivityRecord放在同一個ArrayList裡,可以將mHistory看做一個棧物件,索引0所指向的物件位於棧底,索引mHistory.size()-1所指的物件位於棧頂

Zygote程序孵化出新的應用程序之後,會執行ActivityThread類的main方法。在該方法裡會先準備好Looper和訊息佇列,然後呼叫attach方法將應用程序繫結到ActivityManagerService,然後進入loop迴圈,不斷地讀取訊息佇列裡的訊息,並分發訊息。

ActivityThread的main方法執行後,應用程序接下來通知ActivityManagerService應用程序已啟動,ActivityManagerService儲存應用程序的一個代理物件,這樣ActivityManagerService可以通過這個代理物件控制應用程序,然後ActivityManagerService通知應用程序建立入口Activity的例項,並執行它的生命週期方法。