AIDL之使用

AIDL之使用,第1张

AIDL是一个缩写,全称是Android Interface Definition Language(Android接口定义语言)。主要用于进程间通信

创建AIDL文件跟创建interface类文件类似,只是文件后缀为.aidl,然后clean project,build project会自动生成带stub 实现binder的类文件。Android Studio可以通过右键要建aidl的包 ->New ->AIDL ->AIDL file 创建;生成的aidl文件会在 src/main/aidl/...pakcagename/*.aidl

编写与interface类似;与interface不同的是aidl文件仅是声明函数(不支持变量,常量或extends,函数也不支持重载)。

1)基本类型(int,long,boolean,float,double,char,CharSequence,String),不支持基础类型的封装类型(Integer...)

2)复杂类型(Map,List,Parcelable,aild)。高友其中Map不支持泛型,List支持。Map,List的类型需要是1的类型(Integer等可支持)或者是Parcelable,aidl

使用Parcelable,aidl类型的时,无论是否在引用类所在包,都需要显示声明宴磨

复杂类型做为参数时需要提明tag:in、out或inout。in代表参数是外流入函数,函数内对参数的 *** 作不会影响处部,out则是函数内修改会被同步至外部。inout则是双向(待进一步建立示例说明)

实现AIDL不是实现(implement)接口,而是继承接口.stub类(在编写完接口后build会产生)

说明:AIDL方法的实现是系统为aidl开的线程中执行,而非Service所属应用的主线程(如果调用与Service是同一个应用进程,则会在主线程执行?待验证)。

一般aidl在Service的public IBinder onBind(Intent intent) 中返回:

flags:Context.BIND_AUTO_CREATE

只有activities,services,和contentproviders可以绑定到一个service—你不能从一个broadcastreceiver绑定到service.

接口调用是同步的,即aFunction的执行会hold住调用者的线程,因此一般线程中调用。

Android进程间通信之AIDL(三)—— deadObject异常处理

AIDL文件中使用实现接口Parcelable的类

Android ServiceConnection

——————————————————————————————————————————

如果该文章对您有用,请点个赞;如果对该文章有任何意见及不解之处请留言;谢谢翻阅!!!

———————————————————戚祥槐———————————————————————

新建一个项目腊锋带,如aidl。

点击file——>new,可以看到,基汪列表中是有aidl文件的。点击创建,输入aidl文件名。

这时,系统会自动生成一个和你之前包名一样的一个包,里面就有一个aidl文轮芦件。

编辑aidl文件,如:

// IMyService.aidlpackage com.example.aidl// Declare any non-default types here with import statementsinterface IMyService {/** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */ // 为AIDL服务的接口方法,调用AIDL服务的程序需要调用该方法int add(int value1, int value2)}

编译项目,就可以正常调用了,比如:

//实现接口中的方法class MyServiceImpl extends IMyService.Stub{@Overridepublic int add(int value1, int value2) throws RemoteException {return value1 +value2 }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12252476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存