android进程间通信AIDL使用及问题_刘永雷(雷惊风).docx

android进程间通信AIDL使用及问题_刘永雷(雷惊风).docx

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
android进程间通信AIDL使用及问题详解_刘永雷(雷惊风)汇编

Android进程间通讯AIDL使用及问题详解之前对AIDL用的不是很多,今天抽时间对其做一下详细的了解,下面本人主要从以下几个方面对AIDL做一下总结:什么是AIDL?为什么Android中要有AIDL?什么时候使用AIDL?具体怎么实现AIDL?下面我们就进入今天的分析,分析代码Demo会在最后附上下载地址。本文对应博客地址:/liuyonglei1314/article/details么首先什么是AIDL呢?AIDL全称为Android Interface definition language,顾名思义它是一种Android内部进程通信接口的描述语言,他妈怎么这么绕啊,简单的说它就是Android进程(现在可以先知道每一个App就是一个单独的进程【一个App也可以定义不同的进程】)间通信的桥梁,通过它我们可以定义进程间的通信接口(通过它我们可以在进程间进行相互操作)。为什么Android中要有AIDL呢?因为Android中进程与进程之间是不能相互访问的,每一个进程只能访问自己进程内的数据及操作,每一个进程都有自己的Dalvik VM实例,都有自己的一块独立的内存,都在自己的内存上存储自己的数据,执行自己的操作,相互之间不能通信。什么时候使用AIDL?Android官方文档介绍AIDL中有这么一句话:【Note: Using AIDL is necessary only ifyou allow clients from different applications to access your service forIPC and want to handle multithreading in your service. If you donot need to perform concurrent IPC across different applications, you should create your interfaceby implementing a Binder or, ifyou want to perform IPC, but donot need to handle multithreading, implement your interfaceusing a Messenger. Regardless, be sure that you understand Bound Services before implementing an AIDL.】只有当你允许来自不同的客户端访问你的服务并且需要处理多线程问题时你才必须使用AIDL,其他情况下你都可以选择其他方法,如使用Messager,也能跨进程通讯。可见AIDL是处理多线程、多客户端并发访问的。而Messager是单线程处理。怎么实现AIDL?下面AIDL我们分成两步:Server端代码编写,及为我们提供服务的一端,比如我们有好几个App,有一个App中有一个超牛逼的算法,我们另外几个App中也要用这个算法,这个Server端就是提供算法的那个App。编写Client端代码,Client端为其他几个App。下面我们看一下第一步:server端代码编写。我们以客户端将两个int值传递给服务端,服务端进行相加后返回为例:AS中新建一个项目,创建过程跟普通项目没有区别。然后创建我们的*.aidl文件,在我们新建项目的app文件路径上右键new-AIDL-AIDL File,如下图:创建成功的话会在项目中新增如下目录结构:可以看见与java同级出现了一个aidl目录,其下边的包路径与java包路径相同,再看我们新创建的.aidl文件内容,默认会有一个void basicTypes()方法,其中参数为aidl支持的几种传参基本数据类型(Aidl默认支持的类型包话java基本类型(int、long、boolean等)和(String、List、Map、CharSequence),如果要传递自定义类型,首先要让自定义类型支持parcelable协议),然后我们可以删掉默认方法,添加我们自己的方法,如下:然后Build-rebuild project,在之前eclipse中会自动生成.java文件,AS不行,我们必须重新编译一下项目,然后会在如下文件目录结构中出现我们梦寐以求的.java文件。其代码如下:/* * This file is auto-generated. DO NOT MODIFY. * Original file: D:\\lylsoft\\android\\androidstudio\\mydemo\\AidlClient\\app\\src\\main\\aidl\\com\\jason\\aidl\\aidld

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档