Android 初识AIDL,音视频开发视频教程

通过这种机制,我们只需要写好 aidl 接口文件,编译时系统会帮我们生成 Binder 接口。

简而言之,我们需要打包我们实体类的同时写一个aidl接口文件。

官方文档定义:

使用AIDL时会对内存进行读取,所以经常使用会造成程序变慢,所以不要过多使用

当只使用IPC,不用多线程并使用多个应用程序时,只使用binder就行了

而只有用IPC,不用多线程时,只使用message就好了

AIDL有必要用于使用IPC,处理多线程并且在多个应用程序间共享程序

AIDL支持的数据


  1. JAVA的默认基本数据类型(String,int。。。 short除外)

  2. List和Map

  3. 其它的AIDL接口

  4. 实现Parcelable的实体类

使用AIDL步骤


  1. 创建aidl

①创建实体类并实现Parcelable接口

②新建aidl文件,在其下面创建aidl的映射文件和接口文件

③通过build后生成binder的java文件

  1. 服务端

①创建service,在其中创建上面生成binder的实例,实现接口定义的方法

②在onBind()中返回

  1. 客户端

①实现ServiceConnection接口,在其中拿到AIDL类

②用bindService()绑定service

③使用aidl中的操作

AIDL实例:

(先演示一个小的)

服务端做出了一个A+B的功能,而客户端没有这个功能的时候他要去服务端调用这个功能。

首先在创建IMyaidl文件

// IMyaidl.aidl

package com.rikka.myaidl2;

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

interface IMyaidl {

/**

  • Demonstrates some basic types that you can use as parameters

  • and return values in AIDL.

*/

int add(in int
num1,in int num2);

}

因为只是个a+b的功能,所以没有实体类呀parcelable的说法

然后点个锤子make project产生myaidl

此时去服务端完成这个a+b的功能,新建myservice类

在其中实现onbind()和Stub()

public class MyService extends Service {

@Nullable

@Override

public IBinder onBind(Intent intent) {

return mIbinder;

}

private IBinder mIbinder = new IMyaidl.Stub() {

@Override

public int add(int num1, int num2) throws RemoteException {

return num1+num2;

}

};

}

这里的 new IMyaidl.Stub()函数的返回类型是Ibinder,它先实现IMyaidl里面的接口功能,然后向上转型为Ibinder类型,同时通过onBind()传出。这样做是为了当客户端的activity要去用这个服务端的这个功能时,客户端先要绑定这个service,这时候客户端就能得到这个IBinder了。

接下来客户端要绑定服务,并且通过传入两个值a和b给服务端,让服务端完成a+b

首先要客户端实现接口 ServiceConnection ,在连接服务的时候得到AIDL类

户端的activity要去用这个服务端的这个功能时,客户端先要绑定这个service,这时候客户端就能得到这个IBinder了。

接下来客户端要绑定服务,并且通过传入两个值a和b给服务端,让服务端完成a+b

首先要客户端实现接口 ServiceConnection ,在连接服务的时候得到AIDL类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值