高级07_Android的通讯架构.pptVIP

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
高级07_Android的通讯架构

中程在线(北京)科技有限公司 内部教程 注意保密 Android高級課程 第7章 Android的通讯架构 Android的通讯架构 在Android平台里,其主要的通讯机制是: - 跨进程通讯机制(Inter-Process Communication,简称IPC)是:Binder通讯机制。 -跨线程(Thread)通讯机制是:MQ(Message Queue)机制。 Android是基于Linux的安全机制,将系统空间切分为许多个独立的地址空间,称为进程(Process)。在Android里,一个应用套件(Application Package)通常含有多个Java类(Class),这些类可以在同一个进程(Process)里执行;也可以在不同的进程里执行。如下图: 跨进程通讯机制(IPC) -IPC通讯就是跨越两个不同进程之通讯。一般而言,一个Android应用程序里的各组件(如Activity、Service等)都在同一个进程里执行。这种在同一进程内的沟通,又称为「短程沟通」。 -此IPC通讯仰赖一个IBinder接口,让Client端调用IBinder接口的transact()函数,透过Binder机制而调用到位于远方(Remote)进程的onTransact()函数。 - Binder通信的幕后是依赖Linux的Binder Driver驱动系统(简称为Binder系统),其透过Share Memory来支持高效能的跨进程通讯机制。 例如,A进程的Activity类与B进程的Service类进行远距通讯,如下图: ? -在执行期间,Binder基类会透过JNI而与底层Binder Driver沟通,一起建立Activity与Service之间的联机(Connection),之后就能调用IBinder接口的transact()函数来通讯了。 AIDL的目的是定义Proxy/Stub来封装IBinder接口,以便产生更亲切贴心的新接口。在应用程序里,可以直接使用IBinder接口,你也可以使用AIDL来定义出新接口。 AIDL与Binder通讯机制 AIDL的目的是定义Proxy/Stub来封装IBinder接口,以便产生更亲切贴心的新接口。在应用程序里,可以直接使用IBinder接口,你也可以使用AIDL来定义出新接口。 -由于IBinder接口只提供单一函数(即transact()函数)来进行远距沟通,呼叫起来比较不方便。 AIDL与Binder通讯机制 -Android提供aidl.exe工具来协助产出Proxy和Stub类,以化解这个困难 。 - 藉由开发工具自动产出Proxy及Stub类的程序代码,再分别转交给AP开发者。于是开发者不必具备IPC的知识,因而两者皆能享受到「不知而亦能用」之美好效益。 线程间通信机制:Message/Handler Android多线程环境及其通信机制 -每一个进程在创建时,都会创建一个主线程(Main Thread)。在主线程创建时,也会创建一个Looper类的对象。在Looper对象创建时,也会创建一个Message Queue(简称MQ)数据结构。 -每当主线程作完事情,就会去执行Looper对象。此时,会不断地观察MQ的动态。主线程可以创建新的子线程,子线程也可以继续创建更多子线程,因而形成多线程可能并行(Concurrent)的环境。 在默认情形下,创建子线程时,并不会自动建立其Looper对象,所以也没有MQ。不过,在你的程序代码里可以替子线程创建一个Looper对象(和MQ)。 一旦线程有了MQ,你可以创建Handler对象来将信息(即Message类的对象)丢到MQ里,当线程看到MQ有了新信息,就会取出来处理之。 Message和Handler的使用方法 -主線程最主要的工作就是处理UI画面的事件(Event),每当UI事件发生时,Android框架会丢讯息(Message)到MQ里。主線程看到MQ有新的信息时,就取出信息,然后依据信息内容而去执行特定的函数。执行完毕,就再继续执行Looper对象,不断地观察MQ的动态。 -Activity等对象可以藉由EventHandler对象来将讯息放入MessageQueue里。 例如: mHandler = new EventHandler(); ? 诞生一个EventHandler之对象。 Message m = mHandler.obtainMessage(1, 1, 1, obj); 先诞生一个Message对象,并将数据存入对象里。 mHandler.sendMessage(m); 就透过mHa

文档评论(0)

kakaxi + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档