理解Android系统的进程间通信原理(一)----RPC中的代理模式

272 篇文章 0 订阅

理解Android系统的进程间通信原理(一)----RPC中的代理模式

Android系统中的进程间通信是通过一个轻量级的RPC(Remote Procedure Call远程进程调用)和AIDL(Android Interface Definination Language)规范来生成两个进程之间可以相互访问的代码。其中RPC是以接口方式来实现,客户端与被调用实现之间是通过代理模式来实现的,这些又是以JAVA的RMI和代理模式为理论基础的,若要灵活掌握这个轻量级的解决方案,有必要重新理顺这些基础知识的,这里我们先了解代理模式的相关基础,
有关代理模式的知识,可以用下面这个思维导图来表示:
这里以一个代码实例来说明实际运用:
1、抽象类Role代码
复制代码
 1 package com.magc.proxy;
 2 
 3 /**
 4  * @author magc
 5  *代理角色和真实角色的共同抽象类
 6  */
 7 public abstract class Role {
 8     
 9     //作为代理角色和真实角色的共同接口,方便代理角色对外代替真实角色来提供服务
10     public abstract void service(String user_id);
11 
12 }
复制代码
2、真实角色类RealRole代码
复制代码
 1 package com.magc.proxy;
 2 
 3 /**
 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 }
复制代码
运行测试类,控制台输出结果为:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值