Flutter Channel底层原理分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter Channel底层原理分析相关的知识,希望对你有一定的参考价值。
参考技术A 百度网盘flutter 见46-Flutter ChannelFlutter 提供三种Channel用作Flutter与ios原生平台之间的数据传递
1.FlutterBasicMessageChannel: 用作频繁与原生交互
2.FlutterMethodChannel:用来调用方法,双向通讯
3.FlutterEventChannel:数据流通讯
三种Channel,都有以下成员变量
1.name: Channel 的唯一标识
在Flutter应用中,通常存在多个Platform Channel,使用name区分不同的Channel
2.messenger: 消息信使(BinaryMessenger)
负责Flutter与原生之间的相互通讯
[methodChannel setMethodCallHandler:^(FlutterMethodCall * _Nonnull call, FlutterResult _Nonnull result)
];
setMethodCallHandler方法,MethodCallHandler放在FlutterBinaryMessageHandler中
创建一个FlutterMethodChannel,通过 setMethodCallHandler来进行消息处理,最终会为FlutterMethodChannel绑定一个FlutterBinaryMessageHandler,并以FlutterMethodChannel的name作为key,保存在一个Map结构中
先创建 FlutterEngine->FlutterViewController->FlutterMethodChannel,
调用setMethodCallHandler方法时,会进入FlutterEngine的setMessageHandlerOnChannel:binaryMessageHandle:中,在进入PlatformMessageRouter中进行储存
图解Go的channel底层原理
废话不多说,直奔主题。
channel的整体结构图
简单说明:
buf
是有缓冲的channel所特有的结构,用来存储缓存数据。是个循环链表sendx
和recvx
用于记录buf
这个循环链表中的发送或者接收的indexlock
是个互斥锁。recvq
和sendq
分别是接收(<-channel)或者发送(channel <- xxx)的goroutine抽象出来的结构体(sudog)的队列。是个双向链表
源码位于/runtime/chan.go
中(目前版本:1.11)。结构体为hchan
。
type hchan struct
qcount uint // total data in the queue
dataqsiz
以上是关于Flutter Channel底层原理分析的主要内容,如果未能解决你的问题,请参考以下文章