iOS Channel原理

2020-10-10  本文已影响0人  一个半吊子工程师

Flutter提供了三种Channel用作Flutter与iOS原生平台之间的数据传递:

FlutterBasicMessageChannel

用作字符串和半结构化的数据传递。

1、结构化数据:包括预定义的数据类型、 格式和结构的数据, 常见的比如关系型数据库中数据表里的数据。
2、半结构化数据:具有可识别的模式并可以解析的文本数据文件, 比如XML数据文件。
3、非结构化数据:没有固定结构的数据, 通常保存为不同类型的文件, 比如文本文档、 图片、 视频等。

FlutterMethodChannel

用来调用方法(method invocation),包括从Flutter向原生平台发起方法调用,也支持从原生平台向Flutter发起方法调用

FlutterEventChannel

用来支持数据流(streams)通信

三种Channel分别带来不同的作用。但是在设计上大同小异。都有以下三个成员变量:

  1. name:Channel名称

作为每个Channel的唯一标志。

在我们的Flutter应用中,通常会存在多个Platform Channel。那么这些Channel之间就是通过唯一标志name来区分。例如,使用FlutterMethodChannel发起方法调用时,就需要我们为MethodChannel指定对应的标示name。

  1. messenger:消息信使(BinaryMessenger)

用作消息的发送和接收的工具,主要负责Flutter与原生之间的相互通讯。

通俗来讲,messenger就是咱们现在的外卖小哥。messenger负责把数据从Flutter送到iOS平台,或者从iOS传输数据到Flutter。尽管Flutter中存在三种不同用途的Channel,但是对应的沟通工具都是BinaryMessenger。”

  1. Codec(编解码器)

在Channel中,messenger携带的数据需要在Dart层,Native(iOS/Android平台)层中传输,所以就需要一种与平台无关的数据协议。既能支持图片,又能支持文件等资源。因此官方最终采用了二进制字节流作为数据传输协议。

二进制字节流:发送方需要把数据编码成二进制数据,接收方再把数据解码成原始数据。而负责编解码操作的就是Codec。

上一篇下一篇

猜你喜欢

热点阅读