天天看點

根Activity啟動過程中涉及的程序

在Activity啟動過程中間會涉及4個程序 分别是Zygote程序、Launcher程序、AMS所在程序(SystemServer程序)、應用程序。他們關系如下

根Activity啟動過程中涉及的程式

 首先Launcher程序向AMS請求請求建立根Activity,AMS 判斷根Activity 所需的應用程序是否存在并啟動,如果不存在就會請求Zygote程序建立應用程式,應用程式程序啟動後,AMS會請求建立應用程式程序并啟動Activity .步驟2 采用的Socket通信 步驟1 和步驟4 采用的Binder通信 時序圖可以總結如下:

根Activity啟動過程中涉及的程式

 普通的Activity啟動過程中間會涉及到兩個程序

從應用程式中我們自己調用 startActivity(Intent intent) 會直接調用 Activity 如下代碼:

//Activity.java
    @Override
    public void startActivity(Intent intent) {
        this.startActivity(intent, null);
    }
           

執行内部重載 startActivity(intent, null); 函數

@Override
    public void startActivity(Intent intent, @Nullable Bundle options) {
       判斷是否有傳參行為
        if (options != null) {
            // 調用 Activity startActivityForResult 函數,将參數傳遞下去
            startActivityForResult(intent, -1, options);
        } else {
            // Note we want to go through this call for compatibility with
            // applications that may have overridden the method.
            startActivityForResult(intent, -1);
        }
    }
           

在 應用程式根 Activity 啟動過程#Launcher請求 AMS 過程 小節中,後面邏輯就完全一樣了,是以不再将第二遍了。其中自己應用程式涉及到的程序就 2 個,一個是自己的應用程式程序,另一個就是 AMS 所在的 SystemServer 程序。

繼續閱讀