在瞭解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().