Android中的常见通信机制

北慕城南 提交于 2020-02-28 14:08:48

Android中的常见通信机制

1.Handler同进程的线程间通信

Handler通过sendMessage()发送Message到MessageQueue队列,Looper通过loop()不断提取出Message,并将Message交给target通过displatchMessage()分发给handlerMessage处理。

2.Binder每个应用之间的通信,即进程间通信

普通服务和基于AIDL的服务bindService

3.Android网络编程分为两种:基于http协议的,和基于socket的。

基于Http协议:HttpClient、HttpURLConnection、AsyncHttpClient框架
基于Socket:Socket应用层和传输层之间的一种抽象
(1)针对TCP/IP的Socket、ServerSocket(流套接字)
(2)针对UDP/IP的DatagramSocket、DatagramPackage(数据报套接字)

TCP/IP协议体系结构:应用层、传输层、网络层、网络接口层

OSI模型:应用层表示层会话层传输层网络层数据连接层物理层

TCP协议:

三次握手:

  • 第一次:客户端发送SYN包(=j)到服务器(客户端SYN_SEND状态
  • 第二次:服务器发送ACK(=j+1),自己SYN包(=k)给客户端(服务器SYN_RECV状态
  • 第三次:客户端收到服务器包,向服务器发送ACK(确认)包(=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

四次挥手:

  • 客户端发送一个FIN,用来关闭客户到服务器的数据传送。
  • 服务器收到发回一个ACK,确认序号为收到的序号加1。
  • 服务器关闭与客户端的连接,发送一个FIN给客户端。
  • 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

SYN 同步序列号

ACK TCP 报头的控制位之一,对数据进行确认.

FIN 发送端完成发送任务位

 

4.Android中几种IPC(Inter-Process Communication,进程间通信)机制对比

名称

优点

缺点

适用场景

Bundle

简单易用

只能传输Bundle支持的数据类型

组件间进程间通信

文件共享

简单易用

不适合并发场景,并且无法做到进程间即时通信

无并发访问情形,交换简单数据实时性不高的场景

AIDL

功能强大,支持一对多并发通信,支持实时通信

需要处理好线程同步

一对多通信且有RPC需求

Message

功能一般,支持一对多串行通信,支持实时通信

不能很好处理高并发场景,不支持RPC,数据通过Message进程传输,因此只能传输Bundle支持的数据类型

低并发的一对多即时通信,无RPC需求,或者无需要返回结果的RPC需求

ContentProvider

在数据访问方面功能强大,支持一对多并发数据共享,可通过Call方法扩展其他操作

可以理解为受约束AIDL,主要提供数据源的CRUD操作

对多进程间的数据共享

socket

功能强大,可以使用网络传输字节流,支持一对多并发实时通信

实现细节稍微有点繁琐,不支持直接RPC

网络数据交换,或少数进程间交换

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!