【Android基础知识】AIDL跨进程调用

本文介绍了Android中的AIDL(Android Interface Definition Language),用于实现进程间通信。AIDL使得不同进程间的Service可以通过IBinder对象进行交互。在服务器端,Android自动生成实现了AIDL接口的Stub静态内部类,并在Service中返回IBinder。客户端则创建相同的aidl接口文件,绑定Service获取代理,从而调用远程Service的方法。
摘要由CSDN通过智能技术生成

AIDL(Android interface definition language)Android接口定义语言。

Android 系统中,各应用程序都运行在自己的进程中,进程之间一般无法直接进行数据交换,为了实现这种跨进程通信,Android提供了AIDL Service.

        客户端访问Service时,Android并不是直接返回Service对象给客户端,只是将Service的代理(IBinder对象)通过onBind方法返回给客户端。因此AndroidAIDL的远程接口的实现类就是那个IBinder实现类。

和绑定本地Service不同的是,本地会把IBinder对象本身返回给onServiceConnected方法的第二个参数。但是远程Service只是将IBinder对象的代理传给客户端ServiceConnected的第二个参数。当客户端获取了远程ServiceIBinder对象的代理之后,接下来就可以通过IBinder对象去回调远程Service的属性或方法了。

AIDL使用实例:实现服务器端启动一个服务,随机更改颜色和体重,客户端获取这些信息

服务器端

1.建立aidl文件
package com.aidl;
interface ICat
{
	String getColor();
	double getWeight();
}

2.android会自动生成一个类,类里有stub静态内部类实现了IBinderAidl接口。

/*
 * This file is auto-generated.  DO NOT MODIFY.
 * Original file: E:\\AIDLService\\src\\com\\aidl\\ICat.aidl
 */
package com.aidl;
public interface ICat extends android.os.IInterface
{
/** Local-side IPC implementation stub class. */
public static abstract class Stub extends android.os.Binder implements com.aidl.ICat
{
private static final java.lang.String DESCRIPTOR = "com.aidl.ICat";
/** Construct the stub at attach it to the interface. */
public Stub()
{
this.attachInterface(this, DESCRIPTOR);
}
/**
 * Cast an IBinder object into an com.aidl.ICat interface,
 * generating a proxy if needed.
 */
public static com.aidl.ICat asInterface(android.os.IBinder obj)
{
if ((obj==null)) {
return null;
}
android.os.IInterface iin 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值