理解Android系統的處理序間通訊原理(一)—-RPC中的-代理模式 -RMI-RPC

來源:互聯網
上載者:User
理解Android系統的處理序間通訊原理(一)----RPC中的代理模式
Android系統中的處理序間通訊是通過一個輕量級的RPC(Remote
Procedure Call遠程進程調用)和AIDL(Android Interface Definination
Language)規範來產生兩個進程之間可以相互訪問的代碼。其中RPC是以介面方式來實現,用戶端與被調用實現之間是通過代理模式來實現的,這些又是
以JAVA的RMI和代理模式為理論基礎的,若要靈活掌握這個輕量級的解決方案,有必要重新理順這些基礎知識的,這裡我們先瞭解代理模式的相關基礎,有關代理模式的知識,可以用下面這個思維導圖來表示:這裡以一個代碼執行個體來說明實際運用:1、抽象類別Role代碼package

com.magc.proxy;

/**

*代理角色和真實角色的共同抽象類別

*/

public
abstract
class
Role {

//

作為代理角色和真實角色的共同介面,方便代理角色對外代替真實角色來提供服務

public
abstract 
void

service(String user_id);

}

2、真實角色類RealRole代碼 package
com.magc.proxy;
/**


4
*
@author
magc

5
* 真實角色類

6
* 對外是不可訪問

7
*

8

*/


9
public

class
RealRole
extends
Role {

10


11

/*
(non-Javadoc)

12
* @see com.magc.proxy.Role#service()

13
* 提供服務

14

*/


15
@Override

16

public

void
service(String user_id) {

17
System.out.println(
"
真實角色為你服務……
"
);

18
}

19

//
驗證使用者身份


20

public

boolean
CheckUser(String user_id)

21
{

22

return

true
;

23
}

24


25
}3、代理類ProxyRole代碼: 1
package
com.magc.proxy;

2


3
/**


4
*
@author
magc

5
* 代理角色類

6
* 對用戶端開發其介面

7
* 內部可以直接引用真實角色執行個體,將用戶端的請求轉給真實角色執行個體

8
* 對轉寄請求的前或者後面可以增加一些額外操作

9

*/


10
public

class
ProxyRole
extends
Role {

11

private
RealRole realrole
=

null
;

12


13

/*
(non-Javadoc)

14
* @see com.magc.proxy.Role#service()

15

*/


16
@Override

17

public

void
service(String user_id) {

18
System.out.println(
"
代理角色為你服務……
"
);

19

//
需要時才去建立真實角色執行個體


20
realrole
=

new
RealRole();

21

//
增加額外操作:驗證身份


22
System.out.println(
"
驗證身份……
"
);

23

if
(
!
realrole.CheckUser(user_id))

24

return
;

25
System.out.println(
"
去找真實角色執行個體幫忙處理事務……
"
);

26
realrole.service(
"
magc
"
);

27


28
System.out.println(
"
謝謝光臨……
"
);

29
}

30


31
}4、測試類別RoleTest類代碼 1
package
com.magc.proxy;

2


3
/**


4
*
@author
magc

5
* 代理模式測試類別

6
* 作為用戶端去請求調用代理類的介面。

7
* 用戶端只能訪問代理類,而不能訪問真實角色類

8

*/


9
public

class
ProxyTest {

10


11

/**


12
*
@param
args

13

*/


14

public

static

void
main(String[] args) {

15


16
ProxyRole proxy
=

new
ProxyRole();

17
proxy.service(
"
magc
"
);

18
}

19


20
}運行測試類別,控制台輸出結果為: 由於時間倉促,錯誤難免,希望能給大家有所啟示,也算是在這裡拋磚引玉了,呵呵(二)

理解Android系統中的輕量級解決方案RPC的原理,需要先回顧一下JAVA中的RMI(Remote Method Invocation)這個便於使用的純JAVA方案(用來實現分布式應用)。有關RMI的相關知識,可以通過來歸納:

Android中的RPC也是參考了JAVA中的RMI方案,這裡我們再詳細瞭解一下RPC的實現過程。

Android中的RPC機制是為了實現一個進程使用另一個進程中的遠程對象,它使用了Android自己的AIDL(介面定義語言),使使用者很方
便地定義出一個介面作為規範,通過一個遠程Service為代理
,用戶端在綁定該遠程Service過程中擷取遠程對象,進而使用該對象。可參考所示:

補充:RPC的另一個目的是對用戶端只聲明介面及方法,隱藏掉具體實作類別,供用戶端直接擷取此介面執行個體。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.