- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- 生物七八年级下册复习资料(苏教版).doc
- 生物专题02细胞的结构和功能.doc
- 生物专题五教案.doc
- 生物中考主题一复习教案.doc
- 修改Word文档作者信息(图文教程).doc
- 修改MODEM的PVC的步骤.doc
- 生物人教版必修一模块测试A.doc
- 生物八年级下册复习提纲+Microsoft+Word+文..doc
- 高数全微分的几何意义.ppt
- 修正性侵害犯罪防治法.doc
- 半导体材料性能提升技术突破与应用案例分析报告.docx
- 半导体设备国产化政策支持下的关键技术突破与应用前景报告.docx
- 剧本杀市场2025年区域扩张策略研究报告.docx
- 剧本杀行业2025人才培训体系构建中的市场需求与供给分析.docx
- 剧本杀行业2025年人才培训行业人才培养模式创新与探索.docx
- 剧本杀行业2025年内容创作人才需求报告.docx
- 剧本杀行业2025年区域市场区域剧本市场消费者满意度与市场竞争力研究报告.docx
- 剧本杀市场2025年区域竞争态势下的区域合作策略分析报告.docx
- 剧本杀行业2025人才培训与行业人才培养模式创新.docx
- 剧本杀行业剧本创作人才心理素质培养报告.docx
文档评论(0)