1.ActivityManager是android架構的一個重要部分,它負責一新ActivityThread進程建立,Activity生命週期的維護,本blog就是著手對ActivityManager架構作一個整體的瞭解
2.先看一個靜態類結構圖:
該圖摘自 曹文斌blog<Activity Manager架構解析>
很清楚地描述了ActivityManager架構的幾個主要類之間的關係,我們做應用開發接觸很多的其實就是ActivityManager類,該類也在SDK中公布,應用可以直接存取,它提供了我們管理Activity的一些基本的方法
如下:
public void testgetRecentTasks()
//擷取最近的應用,最後啟動的排前
public void testgetRunningTasks()
//擷取當前啟動並執行Activity應用
public void testgetRunningServices()
//擷取當前啟動並執行service應用
public void testgetRunningAppProcesses()
//擷取所用系統啟動並執行進程
而這些操作都依賴於ActivityManagerProxy代理類的實現,IActivitManager介面定義了所有 ActivityManager架構的操作,ActivityManagerProxy實現了介面IActivitManager,但並不真正實現這些方 法,它只是一個代理類,真正動作的執行為Stub類ActivityManagerService,ActivityManagerService對象只 有一個並存在於system_process進程中,ActivityManagerService繼承於ActivityManagerNative存 根類。
3.從前面分析知,ActivityManager存在於使用者進程中,由使用者進程調用擷取Activity管理的一些基本資料,但是 ActivityManager類並不真正執行這些操作,操作的真正執行在system_process進程中的 ActivityManagerService,ActivityManagerService作為一個服務在system_process啟動時被加 載,關於ActivityManagerService如何被載入這裡不展開討論,後面在討論android系統啟動時在探討,那麼從 ActivityManager到ActivityManagerService中間經過一個環節,那就是進程通訊,而IActivityManager 以及實現介面的代理類ActivityManagerProxy,存根類ActivityManagerNative起著負責進程通訊的作用,我在前面的 blog aidl實現機制淺析中有對進程通訊作了較深入的分析,雖然這裡沒有使用aidl檔案定義進程通訊介面IActivityManager,其實是一樣的, 我們可以把它看做是自己手動編譯的aidl進程通訊java類實現,ActivityManagerProxy是代理 類,ActivityManagerNative是Stub類,IActivityManager是aidl介面,這樣就很容易理解了。
4.ActivityManager提供了很少的方法,要能夠使用IActivityManager介面提供的其他方法我們可以直接使用ActivityManagerProxy對象,如何擷取?
return ActivityManagerNative.getDefault()
不要被方法名稱所迷惑,由於我們在使用者進程調用,是不可能擷取一個ActivityManagerNative對象的(再說 ActivityManagerNative是一個abstract類),我們實際擷取的是一個ActivityManagerProxy對象
理解以上ActivityManager架構基本結構,後面深入研究它就要容易許多了。
原文:http://blog.csdn.net/stonecao/article/details/6579710