一、使用Messenger
1、服务端进程
服务端创建一个Service来处理客户端的连接请求,同时创建一个Handler对象并通过它创建Messenger对象,然后在Service的onBind中返回Messenger对象底层的Binder即可
2、客户端进程
绑定服务端的Service,然后用服务端返回的IBinder对象创建Messenger,通过这个Messenger就可以向服务端发送消息,消息类型为Message对象
备注:以串行的方式处理客户端发来的消息,即大量消息同时发送到服务端,服务端仍然一个一个处理,如果有大量的并发请求,那么用Messenger就不大合适了
二、使用AIDL
1、服务端
服务端首先要创建一个Service来监听客户端的连接请求,然后创建一个AIDL文件,将暴露给客户端的接口在这个AIDL文件中声明,最后在Service实现这个AIDL接口即可
2、客户端
首先需要绑定服务端的Service,绑定成功后,将服务端返回的Binder对象转成AIDL接口所属的类型,接着就可以调用AIDL中的方法了
备注:
1、CopyOnWriteArrayList:支持并发读/写,AIDL方法是在服务端的Binder线程池中执行的,当多个客户端同时连接的时候,会存在多线程同时访问的情形,可以直接使用CopyOnWriteArrayList进行自动线程同步。
2、RemoteCallBackListener:是系统专门提供删除跨进程listener的接口
三、使用Socket
1、Socket也称“套接字”,分为流式套接字和用户数据报套接字,分别对应于网络传输控制层中的TCP和UDP协议
2、TCP协议是面向连接的协议,提供稳定的双向通信功能,TCP连接的建立需要经过‘三次握手’才能完成,为了提供稳定的数据传输功能,其本身提供超时重传机制,因此具有很高的稳定性
3、UDP是无连接的,提供不稳定的单向通信功能,性能上,UDP具有更高的效率,其缺点是不能保证数据一定能够正确传输,尤其是在网络拥塞的情况下