AIDL使用攻略

AIDL使用攻略

ID:38977822

大小:1.16 MB

页数:14页

时间:2019-06-22

AIDL使用攻略_第1页
AIDL使用攻略_第2页
AIDL使用攻略_第3页
AIDL使用攻略_第4页
AIDL使用攻略_第5页
资源描述:

《AIDL使用攻略》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、AndroidInterfaceDefinitionLanguageAIDLRavenWang一、简介AIDL全称AndroidInterfaceDefinitionLanguage即Android接口定义语言,被用作不同进程间的通信,随着客户端的群组化和需求的复杂化,单一的APK已经无法满足客户的需求,面对庞大的代码量,效率和用户体验再一次被提了出来。于是IPC(interprocesscommunication进程间通信)显的格外重要!在启动我们的APP的时候我们可以连带启动另外一个APP去提供数据,去处理一些繁琐的问题,就像Android一样,为每一个应用

2、分配单独的一个虚拟机,就算出现了APP的Crash,也不会影响整个系统。例如:音乐播放器会带来不小的内存开销,在这种情况下多多少少都会带来一些问题,比如用户点击播放器界面之后反应慢等。如果采取Service和Widget结合,通过AIDL去传输数据的话,至少可以保证UI的流畅,还是很有价值的。二、AIDL通信Server端实现1、创建AidlServer这个Demo需要演示的内容有普通参数跨进程读取、对象的跨进程读取、Bitmap的跨进程读取。Role是一个JavaBean,里面包含了角色的各种信息和头像(Bitmap)。DataProvider是为外界APP提

3、供服务的Service。在AndroidManifest.xml中注册时需要添加一个IntentFilter以便被外界启动。2、创建AIDL文件AIDL文件的语法跟Java的语法几乎一致,只是文件的扩展名不是.java而是.aidl本例主要是通过MyAidl去向外界提供服务的。第一行表示该aidl文件所在的包名。先看主方法,里面定义了3个方法,分别为getRoleList()、getRole(Stringname)、getName()。返回值分别为List、Role、String。需要特别注意,不是基本数据类型,需要有方向指示,包括in、out和inout,in

4、表示由客户端设置,out表示由服务端设置,inout是两者均可设置,每个Aidl文件中只能定义一个Interface。其中Role是我们自定义的实体类,Aidl并不能找到这个类,所以需要倒包,但是这个包是Role.java和Role.aidl所在的包。Role.aidl是对Role.java的一个指向。其中只有一句话,意思是指向了一个实现了parcelable接口的Java类。2、实体类的实现使用的类要实现Parcelable接口来序列化,这是Android提供的一个比Serializable效率更高的序列化接口。基本上我们要去实现三个方法:(不知道这个内容描述

5、是干什么用的,返回0是没问题的)Parcel的意思是箱子,这里可以把它理解成容器,一个存放可持久化对象的容器,我们把需要存放的值放到容器里保管。下面方法个定义必须为publicstaticfinalParcelable.CreatorCREATOR=newCreator(){};其中需要实现2个方法,第一个返回一个数组,关键是第二个,他是从序列化中恢复对象的关键,我们从容器中拿出我们想要的值,然后封装成对象,然后把对象返回。(Imag为Bitmap类型,因为Bitmap也是实现了Parcelable接口,所以可以直接调用createFro

6、mParcel(parcel)去获取。)整个实体类写法如下:3、创建Service注意:在Service的onBind方法中要去返回MyAidl.Stub这也是一个IBinder对象(先不说为什么),在这个内部类中会出现我们在aidl文件中声明的方法。4、还差一点点,编译项目。当BuildProject之后,在gen下会出现Eclips自动编译好的MyAidl.java文件到此为止,Server端的工作已基本完成,我是在Service的OnCreate方法中准备的数据,数据怎样去准备纯属依个人喜好。添加一张酷图做头像放到drawable下面名为kbz.png三、

7、AIDL通信Client端的实现1、创建Project首先二话不说,先把Server的gen下面的com.raven.domain包完全copy过来,因为上面用到了Role这个实体类,也需要把这个类拷过来。(如果客户只给了.aidl文件则需要根据.aidl文件中的包名去手动创建包,然后把aidl文件放到该包下Build一下便可得到.java文件。如果手里只有java文件的话,那么根据java文件中的包名去手动创建包即可。)2、数据的展现写一个随意的UI来展现数据,本例UI如下UI没什么可说的3、远程调用。远程调用时需要先定义一个MyAidl对象,然后定义一个Se

8、rviceConnect

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。