㈠ ActivityThread
我們學習 Android 過程中會發現,我們的文件都是 .java 文件,也就是說 Android 開發還是用的 Java 語言來編寫的。也正是這樣,所以你們來學 Android ,也會讓你們先學習一段時間 Java 。掌握好了 Java 的相關知識,學起 Android 來可謂是事半功倍。好了,你們是不是感覺有點扯遠了啊,不是說好講 ActivityThread 類的么,其實並不如此。
你們在剛開始從 Java 學習轉到 Android 學習的過程中,有一個重大的改變不知道你們又沒有發現。那就是 Java 中的 main() 方法,程序的入口不見了,取而代之的是 onCreate() 方法。你們沒有一點疑惑么?初學階段直接無腦接受是對的,但是作為一個工作幾年了的人來說,就有必要去深入研究一下了。明明 Android 也就是 Java 語言也編寫的,差別咋就這么大呢?
其實呢, Android 中還是有 main() 方法的,只是隱藏的比較深而已。今天,就由我 AIqingfeng 來帶你們一探究竟~!
我們先找到 ActivityThread 這個類,看一下注釋( 較少 ,值得一看):
翻譯一下就是:在 Application 進程中 管理執行主線程,調度和執行 活動和廣播 ,和活動管理請求的其它操作。
Android 上一個應用的入口,應該是 ActivityThread 類,和普通的Java 類一樣,入口是一個 main() 方法。
好了,現在我們解決了我們開始的疑惑後,再來深度學習一下這個類的一些知識吧。
ActivityThread 有幾個比較重要的成員變數,會在創建ActivityThread對象時初始化。
final ApplicationThread mAppThread = new ApplicationThread();
ApplicationThread繼承自ApplicationThreadNative, 而ApplicationThreadNative又繼承自Binder並實現了IApplicationThread介面。IApplicationThread繼承自IInterface。這是一個很明顯的binder結構,用於與Ams通信。IApplicationThread介面定義了對一個程序(Linux的進程)操作的介面。ApplicationThread通過binder與Ams通信,並將Ams的調用,通過下面的H類(也就是Hnalder)將消息發送到消息隊列,然後進行相應的操作,入activity的start, stop。
final H mH = new H();
這個 H 大家首先會想到什麼啊,不要開車哈。看到 H 想到了 Handler 。發現 H 是 ActivityThread 內部類,繼承自 Handler ,果然沒錯。所以大家遇到不清楚的,不要怕,大膽的猜測一下。 Handler 最重要的的也就是 handleMessage() 方法了。查看一下其方法:
ActivityThread.java
點進來咯。 ActivityThread.java
興趣是最好的老師。ActivityThread.java
先探索一下 Activity 創建這條路吧。最底層啦。Instrumentation.java
Native方法,C語言啦,活動創建之路結束了。Class.java
再來看看 Activity 中 onCreate() 方法執行之路吧。 Instrumentation.java
到了 Activity 了,哪裡我們自己 Activity 還遠么~! Activity.java
來,仔細瞅瞅~! Activity.java