2012-01-23 63 views
1

引擎蓋下發生了什麼?不知何故,這是傳遞給操作系統,有些顯示操作系統將找到正確的活動/活動,並啓動它?有沒有在Android中運行的服務/ lib處理?我試圖修改操作系統以覆蓋全局的startActivity邏輯,這可能嗎?Android startActivity - 發生了什麼

謝謝。

+1

我可以告訴你,根據應用程序框架(其中的類活動的一部分)打下幾個C++庫,它處理事情的SQLite或表面經理和Android運行時,它從核心庫和移動JRE「ressembles Dalvik的」。也許你可以使用一些流行語進行進一步的研究 – dan

+0

「我試圖修改操作系統以覆蓋全局startActivity的邏輯,這可能嗎?」 - 你說的是爲AOSP做貢獻嗎?或從應用程序內? –

回答

1

我想借此看看Android的源!無論何時我正在開發,並遇到一個問題,我通過源代碼讀取以發現引擎蓋下發生了什麼;這很有趣!它深入瞭解實際發生的情況,以及非常好的文檔和代碼格式指南!

http://source.android.com/source/downloading.html

0

基本上,當一個應用程序第一次啓動,startProcessLocked()ActivityManagerService創建一個新的ProcessRecord(如有必要),然後調用Process.start(),這反過來構建zygote的參數並使用zygoteSendArgsAndGetResult()發送到zygote的套接字。當然,除此之外還有更多,例如,如果一個應用程序共享一個uid,是孤立的等,但是這給了你基本的過程。

縱觀源確實是一個很好的方式來了解發生了什麼事情。但是,除非您打算修改它,否則請不要下載AOSP,只需使用GrepCode即可。更容易瀏覽,搜索和一切都超鏈接,所以很容易遵循類,找到用法,派生方法等。如果你下載AOSP,如果你幸運的話,你會被grep,ack-grep卡住,文本編輯。此外,您只會選擇一個版本結賬。自1.5版以來,GrepCode幾乎包含了所有版本的代碼。

鏈接的文本上方會帶你到GrepCode相關來源。試試看!唯一的缺點是GrepCode不包含本地C++層。