歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android Java代碼的啟動

Android Java代碼的啟動

日期:2017/3/1 9:41:01   编辑:Linux編程

討論從kernel init之後,Android系統啟動的過程,參看froyo。

A)init.rc中啟動了:

1)servicemanager(源碼在frameswork/base/cmds/servicemanager/service_manager.c)

2)app_process(源碼在frameworks/base/cmds/app_process/app_main.cpp)

3)mediaserver(源碼在frameworks/base/media/mediaserver/main_mediaserver.cpp)

B)app_process的main()中調用了AppRuntime(源碼在frameworks/base/core/jni/AndroidRuntime.cpp)的start()方法,將“com.android.internal.os.ZygoteInit”傳入。

C)AppRuntime的start()該方法最終調用了ZygoteInit(源碼在framewors/base/core/java/com/android/internal/os/ZygoteInit.java)的main()方法,同時該方法將android虛擬機使用的native方法注冊了(startReg()).

D)ZygoteInit的main()調用了startSystemServer(),startSystemServer()調用handleSystemServerProcess(),handleSystemServerProcess()調用RuntimeInit.zygoteInit(),RuntimeInit.zygoteInit()調用invokeStaticMain(),這個函數順利執行最終會扔出異常ZygoteInit.MethodAndArgsCaller。這是一個實現了Runnable的異常,由ZygoteInit的main()捕獲並調用run()。

E)MethodAndArgsCaller的run()調用SystemServer的mian()方法,init1()和init2()依次執行,ServerThread線程啟動,java層的各service初始化、開始運行。ActivityManagerService的systemReady()被調用。

F)ActivityManagerService的systemReady()最終調用resumeTopActivityLocked(),該方法調用startHomeActivityLocked(),這個方法裡構造了呼叫HOME的intent,最終HOME啟動。

Android 4.4.4 發布下載 http://www.linuxidc.com/Linux/2014-06/103467.htm

最簡單的Ubuntu Touch & Android 雙系統安裝方式 http://www.linuxidc.com/Linux/2014-01/94881.htm

在Nexus上實現Ubuntu和Android 4.4.2 雙啟動 http://www.linuxidc.com/Linux/2014-05/101849.htm

Ubuntu 14.04 配置 Android SDK 開發環境 http://www.linuxidc.com/Linux/2014-05/101039.htm

64位Ubuntu 11.10下Android開發環境的搭建(JDK+Eclipse+ADT+Android SDK詳細) http://www.linuxidc.com/Linux/2013-06/85303.htm

Ubuntu 14.04 x64配置Android 4.4 kitkat編譯環境的方法 http://www.linuxidc.com/Linux/2014-04/101148.htm

Ubuntu 12.10 x64 安裝 Android SDK http://www.linuxidc.com/Linux/2013-03/82005.htm

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved