Activity深度剖析

在瞭解Activity底層原理之前,首先要知道Framework層類的介紹

ActivityThread:不是一個線程,是一個app進程啓動過程中在主線程當中的一個方法中開啓了ActivityThread。啓動之後會調用main方法,然後創建:

Looper.prepareMainLooper():主線程的loop對象
ActivityThread thread = new ActivityThread()
thread.attach(false):和AMS進行通信
Looper.loop()

等ActivityThread啓動完成後會通知AMS(ActivityManagerServices),在交互的過程中就會拿到:

IActivityManager mgr = ActivityManagerNative.getDefault();遠程代理對象
mgr.attachApplication(mAppThread);mAppThread是具體的bind對象的實例

ApplicationThread是用來和ActivityManagerServices進行通信的一個具體的實現類。在ActivityThread中就進行創建了ApplicationThread了

ActivityClientRecord是Activity的一個描述類,有ActivityInfo對Activity的信息的描述
ActivityRecord:主要是ActivityManagerServices所存儲的一個Activity的一個記錄底棧
Context:上下文環境,它是一個接口。通過具體的實現類來定義Activity,services,application

  • Activity的生命週期的方法是通過Instrumentation來進行管理的,並且它還可以創建Application。啓動Activity,起到一個輔助的作用。
  • ActivityManagerNative是遠程服務器的一個代理類對象,也是輔助進行Activity進行通信的。
  • H handler是用來進行發送消息

Activity的onCreate()的創建是通過handleLaunchActivity調用performLaunchActivity,在performLaunchActivity裏面首先通過classloader加載相關的Activity對象,然後創建Application對象,通過ContextImpl。之後調用activity.attach(),對Activity進行初始化相關的操作。有ContextImp,theme,Configuration,title進行初始化。然後和window對象進行關聯。其實還是調用的是activity.attach,給window對象進行賦值,設置windowManager。最後創建一個幀佈局,decodeView,是整個頂層佈局的對象。然後回調自己的一些方法。mInstrumentation.callActivityOnCreate(activity,r.state)就創建出來了,onCreate()方法。

onResume():ViewManager對View進行管理,兩個實現類,一個WindowManagerImpl,WindowManagerGlobal。還有ViewRootImpl對View的管理。通過activity.makeVisible()進行展示onResume()狀態。

activity、window、windowManager三者之間有什麼關係。
activity作爲控制的層,負責整體的生命週期的管理,並接收我們windowManger發送過來的一些鍵盤的處理。而window就是我們的手機window,主要控制界面的顯示和添加。但是所有界面的管理還是依靠我們的windowManager進行管理的。它可以與我們的遠程的windowMangerServices進行交互。

onStop(),onDestroy().

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章