AIDL
2015-12-13 15:05
489 查看
在Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢? 显然, Java中是不支持跨进程内存共享的。因此要传递对象, 需要把对象解析成操作系统能够理解的数据格式, 以达到跨界对象访问的目的。在JavaEE中,采用RMI通过序列化传递对象。在Android中, 则采用AIDL(Android Interface
Definition Language:接口定义语言)方式实现。
AIDL是一种接口定义语言,用于约束两个进程间的通讯规则,供编译器生成代码,实现Android设备上的两个进程间通信(IPC)。AIDL的IPC机制和EJB所采用的CORBA很类似,进程之间的通信信息,首先会被转换成AIDL协议消息,然后发送给对方,对方收到AIDL协议消息后再转换成相应的对象。由于进程之间的通信信息需要双向转换,所以android采用代理类在背后实现了信息的双向转换,代理类由android编译器生成,对开发人员来说是透明的。
本地服务不支持onBind(),它从onBind()返回null,这种类型的服务只能由承载服务的应用程序组件访问。可以调用
startService()来调用本地服务。AIDL服务可以同时供 同一进程内的组件和其他应用程序的组件使用。这种类型的服务在AIDL 文件中为自身与其客户端定义一个契约。服务实现 AIDL契约,而客户端绑定到 AIDL定义。服务通过从 onBind()方法 返回AIDL接口的实现,来实现契约。客户端通过调用 bindService()来绑定到AIDL服务,并调用 unBindService()来从服务断开。
Definition Language:接口定义语言)方式实现。
AIDL是一种接口定义语言,用于约束两个进程间的通讯规则,供编译器生成代码,实现Android设备上的两个进程间通信(IPC)。AIDL的IPC机制和EJB所采用的CORBA很类似,进程之间的通信信息,首先会被转换成AIDL协议消息,然后发送给对方,对方收到AIDL协议消息后再转换成相应的对象。由于进程之间的通信信息需要双向转换,所以android采用代理类在背后实现了信息的双向转换,代理类由android编译器生成,对开发人员来说是透明的。
本地服务不支持onBind(),它从onBind()返回null,这种类型的服务只能由承载服务的应用程序组件访问。可以调用
startService()来调用本地服务。AIDL服务可以同时供 同一进程内的组件和其他应用程序的组件使用。这种类型的服务在AIDL 文件中为自身与其客户端定义一个契约。服务实现 AIDL契约,而客户端绑定到 AIDL定义。服务通过从 onBind()方法 返回AIDL接口的实现,来实现契约。客户端通过调用 bindService()来绑定到AIDL服务,并调用 unBindService()来从服务断开。
相关文章推荐
- 静态局部变量 http://baike.baidu.com/link?url=h5FJNxRXfawWPNdJEzqWHpKN1HMk6u8wXLYgg8VYCqgd8MbypeKVeaOgZB0B-
- U盘安装Ubuntu——关于UltraISO打开Ubuntu只有EFI文件夹的解决方法
- VM虚拟机 安装OS X 错误vcpu-0:VERIFY vmcore/vmm/main/physMem_monitor.c:1123
- VM虚拟机 安装OS X 错误vcpu-0:VERIFY vmcore/vmm/main/physMem_monitor.c:1123
- AI
- org.hibernate.exception.ConstraintViolationException: could not insert:
- 安卓错误总结:Invalid file name: must contain only [a-z0-9_.]
- Lobes of the brain
- malloc()和calloc()区别 以及memset() http://blog.csdn.net/ermuzhi/article/details/7833701
- 空类大小 http://blog.csdn.net/ianchoi/article/details/6335908
- Debug和Release的区别 http://blog.csdn.net/vbskj/article/details/6990544
- Filter及FilterChain的使用详解
- LeetCode 217:Contains Duplicate
- 设计模式 -- 责任链模式或者叫职责链模式(Chain of Responsibility(CoR))
- 【学神-RHEL7】1-16-RAID5和RAID10创建&LVM管理
- Daily Scrumming* 2015.12.12(Day 4)
- 贪心练习 again (codeforces 系列)
- Grails mac 下入门教程
- 为什么mfc的入口是InitInstance()而没有WinMain()
- 盘点过去一年,MIT人工智能实验室的那些创新