Android IPC机制(Android开发艺术探索)

2017-09-23  本文已影响0人  安安zoe

1. 什么是Android IPC

2. IPC 基础概念

Serializable和Parcelable接口可以完成对象的序列化。
序列化是指将一个对象转化为二进制或者是某种格式的字节流,将其转换为易于保存或网络传输的格式的过程,反序列化则是将这些字节重建为一个对象的过程。
在Android中,intent和Binder在传输数据的时候就需要将对象实现parcelable或者serializable接口。

Android OS中的Zygote进程的IPC采用的是Socket(套接字)机制,Android中的Kill Process采用的signal(信号)机制等等。而Binder更多则用在system_server进程与上层App层的IPC交互。

Binder在Android系统中江湖地位非常之高。在Zygote孵化出system_server进程后,在system_server进程中出初始化支持整个Android framework的各种各样的Service,而这些Service从大的方向来划分,分为Java层Framework和Native Framework层(C++)的Service,几乎都是基于BInder IPC机制。

  1. Java framework:作为Server端继承(或间接继承)于Binder类,Client端继承(或间接继承)于BinderProxy类。例如ActivityManagerService(用于控制Activity、Service、进程等) 这个服务作为Server端,间接继承Binder类,而相应的ActivityManager作为Client端,间接继承于BinderProxy类。 当然还有PackageManagerService、WindowManagerService等等很多系统服务都是采用C/S架构;
  2. Native Framework层:这是C++层,作为Server端继承(或间接继承)于BBinder类,Client端继承(或间接继承)于BpBinder。例如MediaPlayService(用于多媒体相关)作为Server端,继承于BBinder类,而相应的MediaPlay作为Client端,间接继承于BpBinder类。

3. Android 中的binder

参考:
Binder系列—开篇
可能是讲解Binder机制最好的文章
Android Bander设计与实现 - 设计篇
Android - Binder驱动

3.1 面向对象的binder IPC

3.2 Binder通信框架

Binder框架定义了四个角色,Server,Client,ServiceManager,以及binder驱动,驱动运行在内核空间,其他三者运行在用户空间

binder驱动.jpg IPC方式.PNG
上一篇下一篇

猜你喜欢

热点阅读