ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android 初识AIDL,rust移动端跨平台开发

2022-01-27 13:35:37  阅读:195  来源: 互联网

标签:AIDL IMyaidl int aidl 跨平台 接口 Android 服务端


进程需要将其对象分解成操作系统能够识别的原语,并将对象编组成跨越边界的对象。

编写执行这一编组操作的代码是一项繁琐的工作,因此 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的实体类


eworld/article/details/80830269)使用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了。

标签:AIDL,IMyaidl,int,aidl,跨平台,接口,Android,服务端
来源: https://blog.csdn.net/wa2231a/article/details/122716180

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有