Activity本質和內部實現機制
今天把Activity全部內容精簡一遍,activity最後一篇!
Activity本質和內部機制
與Activity相關的Framework層類
ActivityThread本質上不是一個執行緒,是一個java類,ActivityThread是所在主執行緒中的一個類,它的啟動是呼叫main方法,其中內部有幾個重點方法:
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
thread.attach(false);
Looper.loop()
ActivityThread的main()中,首先呼叫Looper.prepareMainLooper();然後呼叫ActivityThread()方法,但事實上這個方法並沒有繼承什麼,是一個普通的方法,最重要的是attach()方法,這個方法主要與ActivityManagerService進行互動,首先呼叫ActivityManagerNative物件,這是一個遠端代理介面,以獲取遠端代理物件。之後呼叫attachApplication(),這個也是對Bundle傳輸資料。
ActivityThread啟動完成後如何通知AMS呢?主要的方法有:
IActivityManager mgr = ActivityManagerNative.getDefault();
mgr.attachApplication(mAppThread);
下面來看ApplicationThread,這是一個很關鍵的類,它是繼承自ApplicationThreadNative類,ApplicationThreadNative類是一個Binder的子類,說明ApplicationThread需要與遠端端進行通訊,即與ActivityManagerService進行通訊,通訊的過程封裝成一個Binder物件。
ActivityClientRecord是客戶端Activity的一個描述的類,是對客戶端的描述,
Context是一個介面,Activity其實是Context的一個子類。
Activity的生命週期的回撥:
Instrumentation用於輔助建立Application, 對生命週期的管理,啟動Activity。
ActivityManagerNative用於與遠端Service進行資料互動
H handle也是與遠端資料互動相關的類,呼叫了,handleLaunchActivity, performLaunchActivity。 classLoader載入相關Activity,Application物件創立,之後,activity.attach()
額,原始碼看的心力憔悴,認輸,這次就先這樣吧,等我醞釀一段時間再說吧……尷尬ing(口吐白沫中……)