Android-Activity啟動流程

來源:互聯網
上載者:User

標籤:gem   http   ams   off   installer   oncreate   並且   emma   是什麼   

http://www.jianshu.com/p/6037f6fda285

 

zygote是什嗎?有什麼作用?

 

zygote意為“受精卵“。

在Android系統裡面,zygote是一個進程的名字。Android是基於Linux System的,當你的手機開機的時候,Linux的核心載入完成之後就會啟動一個叫“init“的進程。在Linux System裡面,所有的進程都是由init進程fork出來的,我們的zygote進程也不例外。

 

所以當系統裡面的第一個zygote進程運行之後,在這之後再開啟App,就相當於開啟一個新的進程。而為了實現資源共用和更快的啟動速度,Android系統開啟新進程的方式,是通過fork第一個zygote進程實現的。所以說,除了第一個zygote進程,其他應用所在的進程都是zygote的子進程,這下你明白為什麼這個進程叫“受精卵”了吧?因為就像是一個受精卵一樣,它能快速的分裂,並且產生遺傳物質一樣的細胞!

 

SystemServer是什嗎?有什麼作用?它與zygote的關係是什嗎?

SystemServer也是一個進程,而且是由zygote進程fork出來的。

系統裡面重要的服務都是在這個進程裡面開啟的,比如
ActivityManagerService、PackageManagerService、WindowManagerService等等

 

public final class SystemServer {    //zygote的主入口    public static void main(String[] args) {        new SystemServer().run();    }    public SystemServer() {        // Check for factory test mode.        mFactoryTestMode = FactoryTest.getMode();    }    private void run() {        ...ignore some code...         //載入本地系統服務庫,並進行初始化         System.loadLibrary("android_servers");        nativeInit();        // 建立系統上下文        createSystemContext();        //初始化SystemServiceManager對象,下面的系統服務開啟都需要調用SystemServiceManager.startService(Class<T>),這個方法通過反射來啟動對應的服務        mSystemServiceManager = new SystemServiceManager(mSystemContext);        //開啟服務        try {            startBootstrapServices();            startCoreServices();            startOtherServices();        } catch (Throwable ex) {            Slog.e("System", "******************************************");            Slog.e("System", "************ Failure starting system services", ex);            throw ex;        }        ...ignore some code...    }    //初始化系統內容物件mSystemContext,並設定預設的主題,mSystemContext實際上是一個ContextImpl對象。調用ActivityThread.systemMain()的時候,會調用ActivityThread.attach(true),而在attach()裡面,則建立了Application對象,並調用了Application.onCreate()。    private void createSystemContext() {        ActivityThread activityThread = ActivityThread.systemMain();        mSystemContext = activityThread.getSystemContext();        mSystemContext.setTheme(android.R.style.Theme_DeviceDefault_Light_DarkActionBar);    }    //在這裡開啟了幾個核心的服務,因為這些服務之間相互依賴,所以都放在了這個方法裡面。    private void startBootstrapServices() {        ...ignore some code...        //初始化ActivityManagerService        mActivityManagerService = mSystemServiceManager.startService(                ActivityManagerService.Lifecycle.class).getService();        mActivityManagerService.setSystemServiceManager(mSystemServiceManager);        //初始化PowerManagerService,因為其他服務需要依賴這個Service,因此需要儘快的初始化        mPowerManagerService = mSystemServiceManager.startService(PowerManagerService.class);        // 現在電源管理已經開啟,ActivityManagerService負責電源管理功能        mActivityManagerService.initPowerManagement();        // 初始化DisplayManagerService        mDisplayManagerService = mSystemServiceManager.startService(DisplayManagerService.class);    //初始化PackageManagerService    mPackageManagerService = PackageManagerService.main(mSystemContext, mInstaller,       mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);    ...ignore some code...    }}

這段代碼很重要。

 

 

ActivityManagerService是什嗎?什麼時候初始化的?有什麼作用?

ActivityManagerService,簡稱AMS,服務端對象,負責系統中所有Activity的生命週期。

ActivityManagerService進行初始化的時機很明確,就是在SystemServer進程開啟的時候,就會初始化ActivityManagerService。

 

經過上面這些步驟,我們的ActivityManagerService對象已經建立好了,並且完成了成員變數初始化。而且在這之前,調用createSystemContext()建立系統內容相關的時候,也已經完成了mSystemContext和ActivityThread的建立。注意,這是系統進程開啟時的流程,在這之後,會開啟系統的Launcher程式,完成系統介面的載入與顯示。

 

Android-Activity啟動流程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.