- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
具体实现步骤 服务端(Service)和客户端(Activity) 1、服务端实现IBinder接口的对象,将被ServiceManager注册登记,继承Service可实现或(getDefaultServiceManager-addService) 2、客户端bindSerivce和ServiceConnection组合(或getService) ,得到远程端IBinder对象 3、调用IBinder对象的transact方法,实现两进程间的Parcel数据交换 注:ServiceManager与zygote服务都是在init进程启动过程中被启动的 注意:这个例子主要是本地应用程序间的通信并不是远程通信。主要是为了理解Binder 的调用形式,远程通信是基于这种通信形式的。 * IPC交互图 服务端实现 public class MyService extends Service { Binder binder = new Binder() { @Override protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException { // TODO Auto-generated method stub System.out.println(transact sth); return super.onTransact(code, data, reply, flags); } }; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return binder; } } * Activity实现(调用端) 绑定 //实现ServiceConnection来获得Ibinder对象 IBinder binder; ServiceConnection sc = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { binder = service; } }; //绑定服务 Intent i = new Intent(); i.setComponent(new ComponentName(llenlonv.service, llenlonv.service.MyService)); bindService(i, sc, Context.BIND_AUTO_CREATE); * Activity实现(调用端) 发送消息给服务端 Parcel data = Parcel.obtain(); Parcel reply= Parcel.obtain(); try { binder.transact(1, data, reply, 0); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } AIDL Android接口定义语言,实现远程的双方在不熟悉IPC技术的条件下编写程序来实现程序间传递数据 使用AIDL实现IPC服务: 创建.aidl文件-该文件(IAIDLService.aidl)定义了客户端可用的方法和数据的接口。 使用aidl工具,将接口文件转化成IAIDLService.java,内含Stub和Proxy定义(可由ADT插件自动生成 ) 实现接口-服务端还要定义一个服务类,内部继承并实现IAIDLService.Stub中的抽象方法 客户端使用IPlayer.Stub.asInterface静态方法和SeviceConnection传递来的IBinder,获得接口的代理实现对象,来实现对远程对象的调用 * 定义AIDL AIDL使用类似Java接口的语法来声明IPC接口,描述其方法以及方法的参数和返回值。这些参数和返回值可以是任何类型,甚至是其他AIDL生成的接口。重要的是必须导入所有非内置类型,哪怕是这些类型是在与接口相同的包中。 下面是AIDL能支持的数据类型: Java编程语言的主要类型 (int, boolean等) — 不需要 import 语句。 以下的类 (不需要import 语句): String List -列表
您可能关注的文档
- 人教版八年级下册英语Unit2样品课件_035份SectionA-1章节.ppt
- 人教版八年级下册英语Unit2样品课件_035份SectionA-2章节.ppt
- 第七章第四节发电机负序电流保护.ppt
- 第七章第四节互换套利保值技术应用.ppt
- 人教版八年级下册英语Unit2样品课件_035份SectionB-2章节.ppt
- 人教版八年级下册英语Unit3样品课件_034份SectionA-1章节.ppt
- 第七章第五节发电机失磁保护.ppt
- 人教版八年级下册英语Unit3样品课件_034份SectionA-2章节.ppt
- 第七章第一节互换概述.ppt
- 人教版八年级下册英语Unit3样品课件_034份SectionB-1章节.ppt
文档评论(0)