TShopping

 找回密碼
 註冊
搜索
查看: 268|回復: 0

[轉帖] 理解Android系統的進程間通信原理(一)----RPC中的代理模式

[複製鏈接]
發表於 2014-11-24 23:56:58 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
Android系統中的進程間通信是通過一個輕量級的RPC(Remote Procedure Call遠程進程調用)和AIDL(Android Interface Definination Language)規範來生成兩個進程之間可以相互訪問的代碼。其中RPC是以接口方式來實現,客戶端與被調用實現之間是通過代理模式來實現的,這些又是以JAVA的RMI和代理模式為理論基礎的,若要靈活掌握這個輕量級的解決方案,有必要重新理順這些基礎知識的,這裡我們先了解代理模式的相關基礎,
有關代理模式的知識,可以用下面這個思維導圖來表示:
1.png
這里以一個代碼實例來說明實際運用:
1、抽像類Role代碼
  1. package com.magc.proxy;

  2. /**
  3. * @author magc
  4. *代理角色和真實角色的共同抽像類
  5.   */
  6. public  abstract  class Role {
  7.      
  8.      // 作為代理角色和真實角色的共同接口,方便代理角色對外代替真實角色來提供服務
  9.     public  abstract  void service(String user_id);

  10. }
複製代碼


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

  2. /**
  3. * @author magc
  4. *真實角色類
  5. *對外是不可訪問
  6. *
  7.   */
  8. public  class RealRole extends Role {

  9.      /* (non-Javadoc)
  10.       * @see com.magc.proxy.Role#service()
  11.       *提供服務
  12.       */
  13.      @Override
  14.      public  void service(String user_id) {
  15.          System.out.println( " 真實角色為你服務…… " );
  16.      }
  17.      // 驗證用戶身份
  18.     public  boolean CheckUser(String user_id)
  19.      {
  20.          return  true ;
  21.      }

  22. }
複製代碼
3、代理類ProxyRole代碼:

  1. package com.magc.proxy;

  2. /**
  3. * @author magc
  4. *代理角色類
  5. *對客戶端開發其接口
  6. *內部可以直接引用真實角色實例,將客戶端的請求轉給真實角色實例
  7. *對轉發請求的前或者後面可以增加一些額外操作
  8.   */
  9. public  class ProxyRole extends Role {
  10.      private RealRole realrole =  null ;

  11.      /* (non-Javadoc)
  12.       * @see com.magc.proxy.Role#service()
  13.       */
  14.      @Override
  15.      public  void service(String user_id ) {
  16.          System.out.println( " 代理角色為你服務…… " );
  17.          // 需要時才去創建真實角色實例
  18.         realrole =  new RealRole();
  19.          // 增加額外操作:驗證身份
  20.         System.out.println( " 驗證身份…… " );
  21.          if ( ! realrole.CheckUser(user_id))
  22.              return ;
  23.          System.out.println( " 去找真實角色實例幫忙處理事務…… " );
  24.          realrole.service( " magc " );
  25.          
  26.          System.out.println( " 謝謝光臨…… " );
  27.      }

  28. }
複製代碼
4、測試類RoleTest類代碼

  1. package com.magc.proxy;

  2. /**
  3. * @author magc
  4. *代理模式測試類
  5. *作為客戶端去請求調用代理類的接口。
  6. *客戶端只能訪問代理類,而不能訪問真實角色類
  7.   */
  8. public  class ProxyTest {

  9.      /**
  10.       * @param args
  11.       */
  12.      public  static  void main(String[] args) {

  13.          ProxyRole proxy =  new ProxyRole();
  14.          proxy.service( " magc " );
  15.      }

  16. }
複製代碼
運行測試類,控制台輸出結果為:
2.png

由於時間倉促,錯誤難免,希望能給大家有所啟示,也算是在這裡拋磚引玉了,呵呵

轉帖 http://www.cnblogs.com/mandroid/archive/2011/02/24/1963357.html

 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-8 10:10 , Processed in 0.064109 second(s), 25 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表