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

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

时间:2023-04-17 20:31:44浏览次数:48  
标签:---- service 角色 代理 间通信 RPC proxy magc public


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


Android系统中的进程间通信是通过一个轻量级的RPC(Remote Procedure Call远程进程调用)和AIDL(Android Interface Definination Language)规范来生成两个进程之间可以相互访问的代码。其中RPC是以接口方式来实现,客户端与被调用实现之间是通过代理模式来实现的,这些又是以JAVA的RMI和代理模式为理论基础的,若要灵活掌握这个轻量级的解决方案,有必要重新理顺这些基础知识的,这里我们先了解代理模式的相关基础,



有关代理模式的知识,可以用下面这个思维导图来表示:




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


这里以一个代码实例来说明实际运用:


1、抽象类Role代码


理解Android系统的进程间通信原理(一)----RPC中的代理模式_移动开发_02


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 }


理解Android系统的进程间通信原理(一)----RPC中的代理模式_移动开发_02


2、真实角色类RealRole代码


理解Android系统的进程间通信原理(一)----RPC中的代理模式_移动开发_02


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 }


理解Android系统的进程间通信原理(一)----RPC中的代理模式_移动开发_02


3、代理类ProxyRole代码:


理解Android系统的进程间通信原理(一)----RPC中的代理模式_移动开发_02


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 }


理解Android系统的进程间通信原理(一)----RPC中的代理模式_移动开发_02


4、测试类RoleTest类代码


理解Android系统的进程间通信原理(一)----RPC中的代理模式_移动开发_02


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中的代理模式_移动开发_02


运行测试类,控制台输出结果为:



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


标签:----,service,角色,代理,间通信,RPC,proxy,magc,public
From: https://blog.51cto.com/u_2198048/6196321

相关文章

  • 基于空间矢量控制的永磁同步电机状态反馈控制转速系统设计及仿真,仿真平台基于MATLAB S
    基于空间矢量控制的永磁同步电机状态反馈控制转速系统设计及仿真,仿真平台基于MATLABSimulink搭建。联系默认发仿真系统文件。另外包含设计文档,高清仿真结果示意图,出图程序设计文档包括,建模、各部分仿真模块设计,控制算法详解ID:85200676106734132......
  • 基于MPC的三相变流器设计及仿真,仿真平台基于MATLAB Simulink搭建
    基于MPC的三相变流器设计及仿真,仿真平台基于MATLABSimulink搭建。内含仿真文件,源代码,设计文档,仿真图。设计文档包括建模,各部分仿真模块设计,控制算法详解。ID:65335674963764486......
  • https中密码套件协商与证书校验
     一、Ciphers(密码套件)1)Ciphers(密码套件)协商过程Ciphers(密码套件)协商过程,通常涉及到多个算法的比较和选择。1、在TLS/SSL握手期间,客户端发送一个客户端支持的密码套件列表给服务端。该列表包含了客户端支持的密码套件。服务端在收到该列表后,会选择一种与客户端相同的密码套件,......
  • 每日打卡4.17
    一、问题描述:中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。二、设计思路:根据题意可以将解题过程分为3步(1)计算从1990年1月1日开始至指定日期共有多少天。(2)由于“打鱼”和“晒网”的周......
  • LeetCode Top100:二叉树的中序遍历(Python)
     给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例1:输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1] 提示:树中节点数目在范围 [0,100] 内-100<=Node.val<=100 以下是一个Python程序,......
  • 2023.4.17 那是谁 在放古老唱片
    加训大数据结构。「LG6109」[Ynoi2009]rprmq1在一般的矩形修改问题中,有时间,横坐标,纵坐标三维,而这题只有横纵坐标两维,所以这本质上是序列上的问题。如果对于每次查询,都有\(l_1=1\),那么直接扫描线,用线段树维护第二维的历史最大值就好了。对于一般情况,需要在第一维进行分治,用类......
  • MATLAB代码:基于纳什谈判理论的风&ndash;光&ndash;氢多主体能源系统合作运行方法
    MATLAB代码:基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法关键词:合作博弈纳什谈判风–光–氢系统综合能源 参考文档:《基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法》基本复现仿真平台:MATLAB平台优势:代码具有一定的深度和创新性,注释清晰,非烂大街的......
  • 基于FNN模糊神经网络的控制器解耦控制matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下: 2.算法涉及理论知识概要       系统的复杂性与所要求的精确性之间存在尖锐矛盾,为此,通过模拟人类学习和自适应能力,人们提出了智能控制的思想。控制理论专家Austrom(1991)在IFAC大会上指出:模糊逻辑控制、神经网络与专家控制是......
  • 使用OkHttpClient如何指定Ciphers密码套件
    在OkHttpClient中,密码套件的配置是通过ConnectionSpec类实现的。ConnectionSpec类用于描述一组TLS/SSL连接参数,包括加密套件、协议版本、证书验证方式等。我们可以使用ConnectionSpec类的静态方法创建一个默认的TLS/SSL连接参数列表,并通过OkHttpClient.Builder.connectionSpecs()......
  • 第五天第一个问题
    问题描述:编写一个程序,可以使用真实姓名、头衔、秘密姓名或成员偏好来列出成员。编写该程序是,请使用下面的结构:structbop{charfullname[strsize];//真实姓名chartitle[strsize];//头衔charbopname[strsize];//秘密姓名intpreference;//成员偏好0=真实......