Android开发中的通信模块|青训营笔记

94 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第13天

本节课的主要内容:Android开发中的通信模块

1,Handler

Handler主要接受子线程发送的数据,并用此数据配合主线程更新UI。
Handler由来: Handler就是来解决主线程和子线程更新UI问题。由于Handler运行在主线程中,它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接收子线程传过来的Message对象任务(子线程使用setMessage()方法进行传递),Message对象包含着数据,然后把这些数据放入主线程队列中,配合主线程进行更新UI。
Handler特点: Handler可以分发Message对象和Runnable对象到主线程中。每个Handler实例,都会绑定到创建他的线程中(一般位于主线程),一般有两个作用:

  • 安排消息或Runnable在某个主线程中某个地方执行
  • 安排一个动作在不同的线程中执行

2,Socket

概念: 是一种抽象层,应用程序通过它来发送和接收数据,使用Socket可以将应用程序添加到网络中,与处于同一网络中的其他应用程序进行通信。简单来说,Socket提供了程序内部与外界通信的端口并为通信双方的提供了数据传输通道。
Socket的分类: 在TCP/IP协议中主要的Socket类型可分为流套接字(streamsocket)和数据报套接字(datagramsocket)。流套接字将TCP作为其端对端协议,提供了一个可信赖的字节流服务。数据报套接字使用UDP协议,提供数据打包发送服务。
socket主要特点: 数据丢失率低,使用简单且易于移植。

3,Binder

概念: Binder是一种进程间通信的机制,在Android系统中,进程间的通信,它们的底层基本都是用到了Binder的IPC机制。
Socket的特点: 性能上:在移动设备上,由于性能受到各方面的限制,例如电量,所以在使用进程间通信时,需要对性能这块有很大的要求。Socket、消息队列这些,在进程间通信时,数据拷贝需要两次,而内存共享只需拷贝无需拷贝,但实现起来比较复杂。Binder在数据上拷贝只需一次,它通过内存映射的机制实现了一次数据拷贝。
安全:传统的IPC,UID/PID只能由用户在数据包填入,这样会导致接收方无法获取到可靠UID/PID,而且还会存在被恶意程序利用的可能。Binder机制中可靠的身份标志只能在IPC机制的内核中添加的,它从协议本身就支持对通信双方进行身份校验,大大提高了安全性。
稳定:Binder基于C/S架构,使用者与提供服务者相互独立,整体清晰,从而提高了整体的稳定性。

通信原理:

  • 一般IPC原理
  • 动态内核可加载模块
  • 内存映射
  • 运行机制
  • 对象的传递

参考资料: juejin.cn/post/712003… www.cnblogs.com/yuluo123/p/… blog.csdn.net/qq_35507234…