导航:首页 > 操作系统 > androidaidl如何工作

androidaidl如何工作

发布时间:2025-07-18 22:17:07

android进阶-AIDL之接口注册/解注册

AIDL-基本使用
AIDL-自定义数据类型
AIDL-修饰符in,out,inout
AIDL-重连方法
AIDL-接口注册/解注册
AIDL-连接池

为什么要特意讲解一下接口的注册与取消注册呢,因为在使用AIDL进程跨进程通信的时候, 每次传递的接口对象在内存中的地址都是不一样的 ,所以在注册了之后,无法使用常规的方式去取消, 因为注册和解注册传递的接口地址都不一样 ,系统无法识别

由于上面的问题,AIDL中提供了一个专门解决上述情况的类 RemoteCallbackList ,其工作原理就是:

首先,在前面讲解 AIDL的基本使用 的基础上先增加新的AIDL接口以及注册和解注册方法:

然后就是 RemoteCallbackList 的使用方法了:
注册/解注册很简单

接着是使用接口的方式:

ps: 需要注意的是 beginBroadcast() 方法和 finishBroadcast() 方法 必须配合使用 ,哪怕只是简单的获取集合大小

使用AIDL进行跨进程间通信中,往往我们是需要注册监听,让服务端通知的,但是服务端也必须提供解注册的方法,不然客户端如果离开某个界面不想再接受消息了,虽然直接离开不做处理客户端这边不会出错,但是服务端那边的监听集合还存在之前的,那么就会浪费系统资源,所以有注册监听的时候,最好也要实现解注册的方法

https://github.com/returntolife455/DemoList

《Android开发艺术探索》

② 如何在Android中使用AIDL设计远程接口麻烦告诉我

在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序地通过进程边界。
通过代码来实现这个数据传输过程是冗长乏味的,Android提供了AIDL工具来处理这项工作。AIDL()是一种IDL语言,用于生成可以在Android设备上两个进程之间进行进程间通信(IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。AIDLIPC机制是面向接口的,像COM或Corba一样,但是更加轻量级。它是使用代理类在客户端和实现端传递数据。
一、使用AIDL实现IPC(ImplementingIPCUsingAIDL)
使用AIDL实现IPC服务的步骤是:第一,创建.aidl文件。该文件(YourInterface.aidl)定义客户端可用的方法和数据接口。第二,在makefile文件中加入.aidl文件(Eclipse中的ADT插件提供管理功能)。Android包括名为AIDL的编译器,位于tools/文件夹。第三,实现接口-AIDL编译器从AIDL接口文件中利用java语言创建接口。该接口有一个继承的命名为Stub的内部抽象类(已实现一些IPC调用的附加方法),要做的就是创建一个继承于YourInterface.Stub的类,并且实现在.aidl文件中声明的方法。第四,向客户端公开接口。如果是编写服务,应该继承Service并且重载Service.onBind(Intent)以返回实现了接口的对象实例。
二、创建.aidl文件(Createan.aidlFile)
AIDL使用简单的语法来声明接口,描述其方法以及方法的参数和返回值。这些参数和返回值可以是任何类型,甚至是其他AIDL生成的接口。需要注意的是,必须导入所有非内置类型。AIDL能支持的数据类型有以下几类:第一,Java编程语言的主要类型(int,boolean等),不需要import语句。第二,通常引引用方式传递的其他AIDL生成的接口,必须要import语句声明。第三,实现了Parcelableprotocol以及按值传递的自定义类,必须要import语句声明。另外,还有一些不需要import语句,如String等。
三、实现接口(ImplementingtheInterface)
AIDL生成了与.aidl文件同名的接口,如果使用Eclipse插件,AIDL会作为编译碰历过程的一部分自动运行(不需要先运行AIDL再编译项目);如果没有插件,就要先运行AIDL。
生成的接口包含一个名为Stub的抽象的内部类,该类声明了所有.aidl中描述的方法,Stub还定义了少量的辅助方法,尤其是asInterface(),通过它获得IBinder(当applicationContext.bindService()成功调用时传递到客户端的onServiceConnected())并且返回用于调用IPC方法的接口实例。要实现自己的接口,就从YourInterface.Stub类继承,然笑蠢搜后实现相关方法(可以创建.aidl文件实现stub方法而不用在中间编译,Android编译过程会在.java文件之前处理.aidl文件)。
在完成了接口的实现后,需要向客户端暴露接口,也就是发布服务。实现的方法是继承Service,然后档知实现以Service.onBind(Intent)返回一个实现了接口的类对象。下面的代码片断表示了暴露IRemoteService接口给客户端的方式。如果有类想要能过AIDL在进程之间传递,这一想法是可以实现的,但必须确保这个类在IPC的两端的有效性。
以上是笔者对《Android中使用AIDL设计远程接口》的一些思路与实现方法。笔者认为,由于Android自身的集成性、控制性、交互性等特点,可以激发学生的学习的兴趣,调动学生的积极参与,扩大学生知识面,提供多种学习的路径。
(作者单位:镇江技师学院)

③ Androidstudio创建AIDL文件的详细过程

Android studio中有一个接口为AIDL的接口,主要是这个接口是描述性接口,使用这个接口可以进行使用在代码中进行通信的一个协议,创建这个接口之后,方便在代码进行调用的这个接口,能更快捷进行开发代码。
1、要进行创建AIDL的接口之前,需要进行选中当前的项目的文件中,选中完成项目之后。
2、然后进行点击Android studio菜单中的“file”的选项,就会弹出了一个下拉的菜单中“new”选项。
3、就会弹出了一个下一级的菜单中,进行选择下一级菜单中的“AIDL”的选项。
4、就会弹出了一个菜单中,进行点击这个菜单中的“AIDL FILE”的选项。
5、就会弹出了一个AIDL的窗口的选项,需要给接口进行添加名称,在interface name的输入框中进行输入名称,点击”finish“的选项。
6、然后在项目中进行天机了一个aidl的文件,在该文件下中,有一个aidl的后缀的文件,其实就是一个接口文件。

阅读全文

与androidaidl如何工作相关的资料

热点内容
注册表启动项命令 浏览:103
89c51单片机定时器 浏览:680
一般不适合做程序员的适合做啥 浏览:915
点在多边形内算法 浏览:486
程序员下班急忙回家 浏览:353
安庆php全套源码交友类型网站源码 浏览:86
浪潮服务器公司地址 浏览:730
密约聊天交友app怎么赚钱 浏览:277
滴滴java 浏览:104
phpexpires 浏览:215
matlab编程用什么语言 浏览:67
php查找字符是否存在 浏览:697
可编程函数发生器 浏览:877
单片机正极接地视频 浏览:63
利用python爬火车票 浏览:374
androidaidl如何工作 浏览:854
第三胸椎压缩骨折什么症状 浏览:506
如何查网址有没有加密 浏览:420
怎么获得服务器神装 浏览:616
分析编译信息 浏览:363