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

被折叠的 条评论
为什么被折叠?



