Android學(xué)習(xí)-ActivityManager與Proy模式的運(yùn)用_第1頁
Android學(xué)習(xí)-ActivityManager與Proy模式的運(yùn)用_第2頁
Android學(xué)習(xí)-ActivityManager與Proy模式的運(yùn)用_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Android 學(xué)習(xí)ActivityManager 與 Proxy 模式的運(yùn)用一 Proxy 模式意圖: 為其他對象提供一種代理以控制這個對象的訪問。適用性:l 遠(yuǎn)程代理( Remote Proxy ): 為一個對象在不同的地址空間提供局部代表。l虛代理(Virtual Proxy)根據(jù)需要創(chuàng)建開銷很大的對象。使用一個代理對象作為代表,在真正的需要時進(jìn)行創(chuàng)建。I保護(hù)代理(Protection Proxy):控制對原始對象的訪問。保護(hù)代理用于對象應(yīng)該有不同的訪問權(quán)限的時候。l智能指引(Smart Reference):取代了簡單的指針,它在訪問對象時執(zhí)行一些附加操作。對指向?qū)嶋H對象的引用計(jì) 數(shù),

2、這樣當(dāng)該對象沒有引用時,可以自動釋放它,智能指針當(dāng)?shù)谝淮我靡粋€持久對象時,將它裝入內(nèi)存。在訪問一個實(shí)際對象前,檢查是否已經(jīng)鎖定了它,以確保其他對象不能改變它結(jié)構(gòu):運(yùn)行時刻一種可能的代理結(jié)構(gòu)的對象圖:理解:1 ) Remote Proxy可以隱藏一個對象存在于不同地址空間的事實(shí)。但是提供一 個代理對象,使用起來就像在使用真正的對象一樣。Virtual Proxy可以進(jìn)行最優(yōu)化,例如根據(jù)要求創(chuàng)建對象。copy - on- write。根據(jù)實(shí)際的需求對所代理的對象進(jìn)行合理管理(創(chuàng)建加載銷毀)Protection Proxies和Smart Reference都允許在訪問一個對象時有一些附加的內(nèi)務(wù)處

3、理;對不同的訪問設(shè)置權(quán)限,對對象進(jìn)行保護(hù)。二 Android 中 ActivityManager從官方文檔的介紹可以看到ActivityManager的作用:是與系統(tǒng)所有正在運(yùn)行著的Acitivity進(jìn)行交互,對系統(tǒng)所有運(yùn)行中的Activity相關(guān)信息(Task,Memory,Service,App) 進(jìn)行管理和維護(hù);提供了相應(yīng)的接口用于獲取這些信息。但是這些信息真正維護(hù)并不是ActivityManager來負(fù)責(zé)的,從其中的眾多接口 getXXX ()可以看到其中都是使用: public List getRunningAppProcesses() return ActivityManagerN

4、ative.getDefault().getRunningAppProcesses();都是通過這個ActivityManagerNative.getDefault()的操作來實(shí)現(xiàn)這些信息的獲取。 雖然再繼續(xù)進(jìn)入函數(shù)查找,仍然不能知道到底是哪一個類的對象在實(shí)施具體的操作。所以要看清楚ActivityManager真正是和誰交互,就需要去探究實(shí)施Activity Manager框架相關(guān)類作、繼承關(guān)系和層次結(jié)構(gòu)以及控制關(guān)系。三Android中Activity Manager相關(guān)類繼承層次關(guān)系看一下類結(jié)構(gòu)圖如下:AAAces ()inT-crfaccIBindcrtransact ()IInterf

5、aceasBindcrOAct i vi tyManagprSi.I getDefault (). get Services ()TAct.ivi AAAces ()inT-crfaccIBindcrtransact ()IInterfaceasBindcrOAct i vi tyManagprSi.I getDefault (). get Services ()TAct.ivi t yManagerBinder+trmsact 0Acti vi tyManagerNa tive -gDcfituli : IAclivilyMatittgcr +uriTriinaa.ct () tgetDef

6、ault 0 : lActivityManagerAct! v ityMan tiger ServiceActivit yMEinagerProxv mReniote : Binderi getStrv lues ()Act iv ityManager-eiRurin i nSpryi ()lActivityManager 作為 ActivityManagerProxy 和 ActivityManagerNative 的公共接口, 所以兩個類具有部分相同的接口,可以實(shí)現(xiàn)合理的代理模式;ActivityManagerProxy 代理類是 ActivityManagerNative 的內(nèi)部類;Ac

7、tivityManagerNative是個抽象類,真正發(fā)揮作用的是它的子類ActivityManagerService (系統(tǒng)Service組件)。 這里設(shè)計(jì)到兩個過程:代理對象建立:ActivityManagerProxy代理對象的創(chuàng)建; 程序執(zhí)行過程:如何通過代理對象來執(zhí)行真正對象請求;從圖中可以看出代理類: 使用 ActivityManagerProxy 代理類, 來代理 ActivityManagerNative 類的子類 ActivityManagerService; ActivityManagerService是系統(tǒng)統(tǒng)一的Service,運(yùn)行在獨(dú)立的進(jìn)程中;通過系統(tǒng)ServiceM

8、anger獲??;ActivityManager 運(yùn)行在一個進(jìn)程里面, ActivityManagerService 運(yùn)行在另一個進(jìn)程內(nèi), 對象在不同的進(jìn)程里面,其地址是相互獨(dú)立的;實(shí)現(xiàn)跨進(jìn)程的對象訪問,需要對應(yīng)進(jìn)程間通信的規(guī)則, 此處是采用Binder機(jī)制實(shí)現(xiàn)跨進(jìn)程通信;所以此處的Proxy模式的運(yùn)用屬于:遠(yuǎn)程代理(RemoteProxy)。下面看看這兩個過程。四 代理實(shí)現(xiàn)過程 1 代理對象建立 是在 ActivityManager 的 getRunningServices 執(zhí)行時就需要代理類來執(zhí)行;public List getRunningServices(int maxNum)retur

9、n ActivityManagerNative.getDefault() getServices(maxNum, 0);繼續(xù)看看 ActivityManagerNative.getDefault()到底干了什么事:實(shí)際上是關(guān)乎到Singleton型的gDefault對象創(chuàng)建;private static final Singleton gDefault = newSingleton() protected IActivityManager create() IBinder b = ServiceManager.getService(activity);IActivityManager am =

10、 asInterface(b);return am;ServiceManager.getService(activity);獲取系統(tǒng)的“activity”的 Service, 所有的Service都是注冊到ServiceManager進(jìn)行統(tǒng)一管理。這樣就創(chuàng)建了一個對ActivityManagerService實(shí)例的本地代理對象ActivityManagerProxy實(shí)例。Singleton是通用的單例 模板類。ActivityManagerNative.getDefault就返回一個此代理對象的公共接口 IActivityManager類型,就可以在本地調(diào)用遠(yuǎn)程對象的 操作方法。2 執(zhí)行過程這

11、個執(zhí)行過程就設(shè)計(jì)到ActivityManager框架的執(zhí)行流程;簡單看一下這個getServices的執(zhí)行過程。Localgel Rimn i ngServ i eesAcli v i(yManagerProxynnTransactLocalgel Rimn i ngServ i eesAcli v i(yManagerProxynnTransactoriT ransae i gebScrvices此圖表明整個 Client 對 Service 的訪問是通過 Service 的代理對象 Proxy 進(jìn)行訪問的。Android 中對 Service 訪問的模式都是以 Client/Server 模式進(jìn)行;Client 實(shí)際

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論