RPC & AIDL

本文介绍了Android中实现进程间通信的RPC机制,重点讲解了AIDL(Android Interface Definition Language)的工作原理和使用方法。从应用层到framework层,阐述了AIDL如何帮助创建服务并允许不同应用间进行交互,详细解析了Binder RPC的调用流程。
摘要由CSDN通过智能技术生成
RPC & AIDL

一般创建的服务并不能被其他的应用程序访问。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。
Android使用AIDL来实现。

每一个进程都有自己的Dalvik VM实例,都有自己的一块独立的内存,都在自己的内存上存储自己的数据,执行着自己的操作,都在自己的那片狭小的空间里过完自己的一生。每个进程之间都你不知我,我不知你,就像是隔江相望的两座小岛一样,都在同一个世界里,但又各自有着自己的世界。而AIDL,就是两座小岛之间沟通的桥梁。相对于它们而言,我们就好像造物主一样,我们可以通过AIDL来制定一些规则,规定它们能进行哪些交流。

何时使用AIDL是必要的:只有你允许客户端从不同的应用程序为了进程间的通信而去访问你的service。

Binder RPC 机制

在这里插入图片描述

1.client通过获得一个server的代理接口,对server进行直接调用;
2.代理接口中定义的方法与server中定义的方法是一一对应的;
3.client调用某个代理接口中的方法时,代理接口的方法会将client传递的参数打包成为Parcel对象;
4.代理接口将该Parcel发送给内核中的binder driver.
5.server会读取binder driver中的请求数据,如果是发送给自己的,解包Parcel对象,处理并将结果返回;
6.整个的调用过程是一个同步过程,在server处理的时候,client会block住。
应用层AIDL的使用方法
服务端步骤步骤
1.建立AIDL,自动生成java接口

Java包目录中建立一个扩展名为A.aidl的文件,并写下需要的接口。如果aidl文件的内容是正确的,ADT会在gen目录下自动生成一个A.Java接口文件。

2. 实现service

建立一个服务类(Service的子类)

public class MyService extends Service 

创建的服务类中创建一个内部类,实现由aidl文件生成的Java接口

MyServiceImpl 

服务类的onBind方法返回时,将实现aidl接口的内部类对象返回出去

return new MyServiceImpl();
public class MyService extends Service {        
@Override      
public IBinder onBind(Intent arg0) { 
    return new MyServiceImpl();  
}        
public class MyServiceImpl extends IMyService.Stub 
{      
    public String funcXXX
    {
    }

}  
    
}

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值