Android进程间通信纪要

本文深入解析Android平台中进程间通信(IPC)技术,特别是BinderFramework的作用,以及如何通过Messenger、AIDL等机制实现IPC。同时,阐述了在Android开发中常用的序列化方式,包括Serializable和Parcelable,并提供了具体的实现示例。
  1. 虽然Android是基于Linux的,但在Linux操作系统中的IPC技术在Android平台中被Binder Framework替代。Messenger、AIDL等进程间通信方式底层都是基于Binder的。
  2. Android中每个app都有独立的虚拟机,不同虚拟机在内存分配上有不同的地址空间,一般来说每个app都对应着一个进程,因此进程间通信不像线程间那样可以通过共享内存来实现。
  3. 进程间通信传递的数据,包括传入参数与返回值都需要实现android.os.Parcelable接口
  4. 有两种常用的序列化方式:Serializable——Java中的序列化方式,使用简单,开销较大,效率不是很高,比较适合磁盘序列化;Parcelable—— Android中的序列化方式,实现较为繁琐,效率较高,适合内存序列化,也是在Android开发中推荐使用的序列化方式。
  5. 常用的进程间通信方式有如下几种:<1>通过Intent在Activity、Service或BroadcastReceiver间进行进程间通信,可通过Intent传递数据<2>AIDL方式<3>Messenger方式<4>利用ContentProvider<5>Socket方式<6>基于文件共享的方式
  6. 由于远程方法可能是耗时的操作,因此请务必在客户端使用工作线程去执行RPC操作。除非你很清楚远端进程的操作是怎样的。 或者UI线程发起一个异步调用,通过callback来获取返回结果。如果从服务端调客户端的远程方法,如果也是耗时操作,同样需要开子线程。
  7. Messenger机制是单线程顺序执行的,容易实现,其实质是基于AIDL的。所能传递的数据类型为Message,跟线程间使用Message机制类似,但要注意对object参数的限制。
  8. 通过Binder框架实现进程间通信的原理示意(插图来自Efficient Android Threading):
    这里写图片描述
  9. 通过AIDL进程间通信示意图(插图来自Efficient Android Threading):
    这里写图片描述
  10. 使用Messenger进程间通信示意图(插图来自Efficient Android Threading):
    这里写图片描述
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值