android开发使用AIDL进程间通信

  次阅读 作者:智能小宝 来源:互联网 2016-01-19 12:21 我要评论(0)

对于客户端和服务之间通信,虽然可以通过Ibinder实现,但需要共享业务实现,如果在进程间通 信的haunted,需要使用AIDL(Android Interface Definition Language)进行。

AIDL是一种接口定义语言,用于约束两个进程间的通讯规则,编译器生成代码,实现Android设备上的两个进程间通信(IPC),AIDL的 IPC机制和EJB所采用的CORBA很类似,进程之间的通信信息,首先会被转换成AIDL协议消息,然后发送给对方,对方收到AIDL协议消息后在转换 成相应的对象。由于进程之间的通信信息需要双向转换,所以android采用代理类背后实现了信息的双向转换,代理类由android编译器生成,对开发 人员来说是透明的。

使用方式如下:

1、 定义AIDL(同接口相似,但没有可见性,扩展名有.java >.aidl)

//IdownloadService.aidl,注意扩展名

package cn.itcast.aidl;

interface IdownloadService{

void download(in/out/input String path);//in|out|inout是参数的方向。

}

Ide会自动在gen包下生成对应的java类,接口文件中生成一个stub的抽象类,里面包括aidl定义的方法,还包括一些其它辅助方法。值得 关注的是asInterface(IBinder iBinder),它返回接口类型的实例,对于远程服务调用,远程服务返回给客户端的对象,客户端 onServiceConnectionted(ComponentName name,IBinder service)方法引用该对象时不能直接强转成接口类型的实例,而应该使用asInterface(IBinder iBinder)进行类型转换。

编写AIDL需要注意:

1. 接口名和aidl文件相同。

2. 接口和方法前不用加访问权限修饰符public,private,protected等,也不能用final,static.

3. Aidl默认支持的类型包括java基本类型(int,long,boolean等)和(String,List,Map,CharSequence), 使用这些类型是不需要import声明,对于List和Map中的元素类型必须是Aidl支持的类型,如果用自定义类型作为参数或返回值,自定义类型必须 实现Parcelable接口。

4. 自定义类型的AIDL生成的其它接口类型在aidl描述文件中,应该显示import,即便在该类型和定义的包同一个包中。

5. 在aidl文件中所有非Java基本类型参数必须加上in、out、inout标记,以指明参数是输入参数,输出参数还是输入输出参数。

6.Java原始类型默认的标记位in,不能为其它标记。

Javabean必须实现Parcelable接口

class Person implements Parcelable{

id,name;

public int describeContents(){

return 0;

}

//把javabean中的数据写到Parcel

public void writeToParcel(Parcel dest,int flags){

dest.writeInt(this.id);

dest.writeString(this.name);

}

//添加一个静态成员,名为CREATOR,该对象实现了Parcelable.Creator接口

public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>(){

public Person createFromParcel(Parcel source) { return new Person(source.readInt(), source.readString());

}

public Person[] newArray(int size) {

return new Person[size];

}};

}

在自定义类型包中定义aidl声明文件

//Person.aidl,注意Parcelable是小写

Package cn.itcast.domain;

parcelable Person;

interface cn.itcast.domain.Person;

interface IPersonService{

void save(in Person person);

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...