大型项目必备 IPC 之其他 IPC 方式(二)(1),移动跨平台开发框架移动
(2)客户端进程
客户端进程中,首先需要绑定服务端的 Service,绑定成功后,用服务端返回的 IBinder 对象来创建一个 Messenger,然后通过 Messenger 就可以向服务端发送消息了,发送的消息类型为 Message 对象。【注:如果需要服务端能够 回应客户端,就和服务端一样,我们需要在客户端也创建一个 Handler(重写 handleMessage 方法处理回传的数据)并创建一个新的 Messenger,并把这个 Messenger 对象通过 Message 的 replyTo 参数传递给服务端,服务端通过这个 replyTo 参数就可以回应客户端】。
4.AIDL
上面说到 Messenger,其是以串行的方式处理客户端发来的消息,如果有大量的并发请求,那么使用 Messenger 就不太合适了。同时 Messenger 主要作用就是传递消息,很多时候我们可能需要跨进程调用服务端的方法,这种情形 Messenger 就无法做到了,但是我们可以使用 AIDL 来实现跨进程的方法调用。下面就介绍一下 AIDL 的使用。使用使用 AIDL,也分为服务端和客户端:
(1)服务端
服务端首先要创建一个 Service 用来监听客户端的连接请求,然后创建一个 AIDL 文件,将暴露给客户端的接口在这个 AIDL 文件中声明,最后在这个 Service 中实现这个 AIDL 接口即可。
(2)客户端
客户端要做的事情稍微简单一些,首先需要绑定服务端的 Service,绑定成功后,将服务端返回的 Binder 对象转成 AIDL 所属的类型,接着就可以调用 AIDL 中的方法了。
5.ContentProvider
ContentProvider 是 Android 中提供的专门用于不同应用间进行数据共享的方式,从这一点,它天生就适合进程间通信。和 Messenger 一样,contentProvider 的底层实现同样是 Binder,由此可见,Binder 在 Android 中是何等的重要。虽然 ContentProvider 底层是用 Binder,但它的使用过程要比 AIDL 简单许多,因为系统已经做了封装。系统预置了许多 ContentProvider,比如通讯录信息,日程变信息等,要跨进程访问这些信息,只需要通过 ContentResolver 的 query、update、insert 和 delete 方法即可。使用:创建一个自定义的 ContentProvider 很简单,只需要继承 ContentProvider 类并实现六个抽象方法即可:onCreate、query、update、insert、delete 和 getType。除了 onCreate 由系统回调并运行在主线程中,其他五个方法由外界回调并运行在 Binder 线程池中。
6.Socket
Socket 也称为“套接字”。是网络通信中的概念,它分为流式套接字和用户数据报套接字两种,分别对应于网络传输控制层中的 TCP 和 UDP 协议。TCP 是面向连接的协议,提供稳定的双向通信功能,TCP 连接的建立需要经过“三次握手”才能完成,为
了提供稳定的数据传输功能,其本身提供了超时重传机制,因此具有很高的稳定性。而 UDP 是无连接的,提供不稳定的单向通信功能,当然 UDP 也能实现双向通信功能。在性能上,UDP 具有更高的效率,缺点是不保证数据一定能够正确传输,尤其是在网络阻塞的情况下。
**阿里 P7Android 高级架构进阶视频免费学习请点击:[https://space.bilibili.com/474380680](
)**
评论