Flutter Channel底层原理分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter Channel底层原理分析相关的知识,希望对你有一定的参考价值。

参考技术A 百度网盘flutter 见46-Flutter Channel

Flutter 提供三种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所特有的结构,用来存储缓存数据。是个循环链表
  • sendxrecvx用于记录buf这个循环链表中的发送或者接收的index
  • lock是个互斥锁。
  • recvqsendq分别是接收(<-channel)或者发送(channel <- xxx)的goroutine抽象出来的结构体(sudog)的队列。是个双向链表

源码位于/runtime/chan.go中(目前版本:1.11)。结构体为hchan

type hchan struct 
   
    qcount   uint           // total data in the queue
    dataqsiz 

以上是关于Flutter Channel底层原理分析的主要内容,如果未能解决你的问题,请参考以下文章

channel 的底层原理

channel 的底层原理

channel 的底层原理

channel底层原理

图解Go的channel底层原理

最全Go select底层原理,一文学透高频用法