AIDL -- 小白学习笔记1

AIDL 是Android Interface definition language的缩写,android内部进程通信(IPC)接口的描述语言,通过它我们可以定义进程间的通信接口。具体实现就从一个小例子来说明吧。
情景:A进程的UI界面可以显示两个整数进行相加的展示结果,但是不能进行实际运算,B进程可以进行两个整数的运算。所以这里可以用到AIDL完成两个整数的相加,并且显示结果。
假设A进程为客户端,B进程为服务端。
  1. 在客户端创建接口文件和要实现的方法
    以android studio 开发环境为例,在java 包下创建一个AIDL Fodler ,在AIDL Fodler 下创建一个 AIDL file ,编写要实现的方法。如下:
// IMyAidlInterface.aidl
package xiaomeng.bupt.com.myaidltest;

// Declare any non-default types here with import statements

interface IMyAidlInterface {

    int add(int num1,int num2);

}

 2.实现你定义aidl接口中的内部抽象类

 再建一个service类 ,在这个类里去实现

public class AddService extends Service {

//当客户端拿到该服务的时候
@Nullable
@Override
public IBinder onBind(Intent intent) {
    return iBinder;
}

private IBinder iBinder = new IMyAidlInterface.Stub() {
@Override
public int add(int num1, int num2) throws RemoteException {
Log.d(TAG, “add: num1 “+num1+ ” num2 is “+num2);
return (num1+ num2);
}
};

}


 3.在客户端添加一个和服务端一样的接口
     可以直接COPY过去,但是要注意包名的一致性。在客户端的MainActivity 中的onCreate()方法里要绑定服务。拿到远程服务,实现服务的方法,并且将服务计算的结果返回数据拿到。

private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//拿到远程服务
myInterface = IMyAidlInterface.Stub.asInterface(service);
}

//绑定服务的时候
private void binderService() {
Intent intent = new Intent();
//intent.setComponent(newComponentName(“xiaomeng.bupt.com.myaidltest”,
// “xiaomeng.bupt.com.myaidltest.AddService”));
intent.setAction(“xiaomeng.bupt.com.myaidltest.AddService”);
bindService(intent,conn, Context.BIND_AUTO_CREATE);
Log.d(TAG, “binderService: 绑定服务”);
}

 @Override
    public void onClick(View v) {
        int num1 = Integer.parseInt(editText1.getText().toString());
        int num2 = Integer.parseInt(editText2.getText().toString());

        try {
            int sum =  myInterface.add(num1,num2);
            sumText.setText(sum+"");
        } catch (RemoteException e) {
            e.printStackTrace();
            sumText.setText("出错了");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值