理解Android系統的進程間通信原理(一)----RPC中的代理模式
Android系統中的進程間通信是通過一個輕量級的RPC(Remote Procedure Call遠程進程調用)和AIDL(Android Interface Definination Language)規範來生成兩個進程之間可以相互訪問的代碼。其中RPC是以接口方式來實現,客戶端與被調用實現之間是通過代理模式來實現的,這些又是以JAVA的RMI和代理模式為理論基礎的,若要靈活掌握這個輕量級的解決方案,有必要重新理順這些基礎知識的,這裡我們先了解代理模式的相關基礎,有關代理模式的知識,可以用下面這個思維導圖來表示:
這里以一個代碼實例來說明實際運用:
1、抽像類Role代碼
package com.magc.proxy;
/**
* @author magc
*代理角色和真實角色的共同抽像類
*/
publicabstractclass Role {
// 作為代理角色和真實角色的共同接口,方便代理角色對外代替真實角色來提供服務
publicabstractvoid service(String user_id);
}
2、真實角色類RealRole代碼
package com.magc.proxy;
/**
* @author magc
*真實角色類
*對外是不可訪問
*
*/
publicclass RealRole extends Role {
/* (non-Javadoc)
* @see com.magc.proxy.Role#service()
*提供服務
*/
@Override
publicvoid service(String user_id) {
System.out.println( " 真實角色為你服務…… " );
}
// 驗證用戶身份
publicboolean CheckUser(String user_id)
{
returntrue ;
}
}3、代理類ProxyRole代碼:
package com.magc.proxy;
/**
* @author magc
*代理角色類
*對客戶端開發其接口
*內部可以直接引用真實角色實例,將客戶端的請求轉給真實角色實例
*對轉發請求的前或者後面可以增加一些額外操作
*/
publicclass ProxyRole extends Role {
private RealRole realrole =null ;
/* (non-Javadoc)
* @see com.magc.proxy.Role#service()
*/
@Override
publicvoid service(String user_id ) {
System.out.println( " 代理角色為你服務…… " );
// 需要時才去創建真實角色實例
realrole =new RealRole();
// 增加額外操作:驗證身份
System.out.println( " 驗證身份…… " );
if ( ! realrole.CheckUser(user_id))
return ;
System.out.println( " 去找真實角色實例幫忙處理事務…… " );
realrole.service( " magc " );
System.out.println( " 謝謝光臨…… " );
}
}4、測試類RoleTest類代碼
package com.magc.proxy;
/**
* @author magc
*代理模式測試類
*作為客戶端去請求調用代理類的接口。
*客戶端只能訪問代理類,而不能訪問真實角色類
*/
publicclass ProxyTest {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
ProxyRole proxy =new ProxyRole();
proxy.service( " magc " );
}
}運行測試類,控制台輸出結果為:
由於時間倉促,錯誤難免,希望能給大家有所啟示,也算是在這裡拋磚引玉了,呵呵
轉帖 http://www.cnblogs.com/mandroid/archive/2011/02/24/1963357.html
頁:
[1]