1. 程式人生 > >Activity本質和內部實現機制

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(口吐白沫中……)