Android AIDL 初始学习

Android AIDL用于实现不同进程间的通信。服务端创建AIDL接口并实现服务,客户端通过Intent绑定服务,使用ServiceConnection进行连接。在服务端,通过IBinder返回接口实例;客户端获取接口实例后调用方法进行通信。注意AIDL文件和包名在两端需一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android中的AIDL主要用于两个进程间的通信,大家都知道对于安卓来说一个APP应用就是一个独立的进程,那么要实现两个应用之间的通信,就需要依靠AIDL来实现。

实现的步骤分为客户端和服务端,服务端依靠一个service类来完成,客户端绑定service 这样就可以实现简单的通信。我们以一个简单的计算过程来做了解,具体如下:

首先是服务端建立AIDL文件,和普通的定义接口过程类似,这个文件在客户端也要拷贝一份,作为通信的共同语言。

服务端service类代码编写如下:

package com.example.testaidl;
import com.example.aidl.TestAidl;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;


public class AddService extends Service{
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
private IBinder iBinder=new TestAidl.Stub() {
@Override
public int add(int num1, int num2) throws RemoteException {
return num1+num2;
}
};
}

由于是一个service类 大家不要忘记在mainfest文件进行配置。

接下来就是客户端的实现。我们利用Intent来进行服务的绑定,

 private void bindService() {
// TODO Auto-generated method stub
    Intent intent=new Intent("com.example.testaidl.AddService");

bindService(intent, conn, Context.BIND_AUTO_CREATE);
}

上面的conn是一个ServiceConnection类 ,我们需要声明一个

ServiceConnection conn=new ServiceConnection() {
//绑定上服务的时候
@Override
public void onServiceDisconnected(ComponentName name) {
testAidl=null;
}
//断开服务的时候
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
testAidl=TestAidl.Stub.asInterface(service);
}
};

看起来很明显,TestAidl.Stub.asInterface(service);这句话用于在绑定成功时从服务端返回一个实例的对象,接下来就可以调用它的方法了。

int result=testAidl.add(Integer.parseInt(editText1.getText().toString()), Integer.parseInt(editText2.getText().toString()));
editText3.setText(result+"");

点击按钮 将数据发送到服务端,进行相加的运算再把结果返回显示。

这样简单的交互就完成了,切记AIDL文件在客户端和服务端都要存在,并且包名要一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值