woff 發表於 2014-11-24 23:56:58

理解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]
查看完整版本: 理解Android系統的進程間通信原理(一)----RPC中的代理模式