Flutter之MethodChannel

前言

Flutter是Google使用Dart语言开发的一套移动应用开发框架。它不同于其他开发框架:

  1. 因为Flutter使用AOT预编译代码为机器码,所以它的运行效率更高。

  2. Flutter的UI控件并没有使用底层的原生控件,而是使用Skia渲染引擎绘制而成,因为不依赖底层控件,所以多端一致性非常好。

  3. Flutter的扩展性也非常强,开发者可以通过Plugin与Native进行通信。

简介

Flutter使用了一个灵活的系统,允许您调用特定平台的API,无论在Android上的Java或Kotlin代码中,还是iOS上的ObjectiveC或Swift代码中均可用。

  1. Flutter平台特定的API支持不依赖于代码生成,而是依赖于灵活的消息传递的方式:

  2. 应用的Flutter部分通过平台通道(platform channel)将消息发送到其应用程序的所在的宿主(iOS或Android)。

宿主监听的平台通道,并接收该消息。然后它会调用特定于该平台的API(使用原生编程语言) - 并将响应发送回客户端,即应用程序的Flutter部分。

框架概述: 平台通道

使用平台通道在客户端(Flutter UI)和宿主(平台)之间传递消息,如下图所示:https://i.imgur.com/ZfAk0ST.png)]

消息和响应是异步传递的,以确保用户界面保持响应(不会挂起)。

在客户端,MethodChannel (API)可以发送与方法调用相对应的消息。 在宿主平台上,MethodChannel 在Android((API) 和 FlutterMethodChannel iOS (API) 可以接收方法调用并返回结果。这些类允许您用很少的“脚手架”代码开发平台插件。

平台通道数据类型支持和解码器

标准平台通道使用标准消息编解码器,以支持简单的类似JSON值的高效二进制序列化,例如 booleans,numbers, Strings, byte buffers, List, Maps(请参阅StandardMessageCodec了解详细信息)。 当您发送和接收值时,这些值在消息中的序列化和反序列化会自动进行。
在这里插入图片描述

Flutter定义了三种不同类型的Channel,它们分别是

  1. BasicMessageChannel:用于传递字符串和半结构化的信息。
  2. MethodChannel:用于传递方法调用(method invocation)。
  3. EventChannel: 用于数据流(event streams)的通信。

BasicMessageChannel Androd端:
在这里插入图片描述

BasicMessageChannel Flutter端:

在这里插入图片描述

EventChannel Androd端:
在这里插入图片描述
EventChannel Flutter端:

在这里插入图片描述

三种Channel之间互相独立,各有用途,但它们在设计上却非常相近。每种Channel均有三个重要成员变量:

  1. name: String类型,代表Channel的名字,也是其唯一标识符。
  2. messager:BinaryMessenger类型,代表消息信使,是消息的发送与接收的工具。
  3. codec: MessageCodec类型或MethodCodec类型,代表消息的编解码器。

Channel name

​ 一个Flutter应用中可能存在多个Channel,每个Channel在创建时必须指定一个独一无二的name,Channel之间使用name来区分彼此。当有消息从Flutter端发送到Platform端时,会根据其传递过来的channel name找到该Channel对应的Handler(消息处理器)

BinaryMessenger是Platform端与Flutter端通信的工具,其通信使用的消息格式为二进制格式数据。当我们初始化一个Channel,并向该Channel注册处理消息的Handler时,实际上会生成一个与之对应的BinaryMessageHandler,并以channel name为key,注册到BinaryMessenger中。当Flutter端发送消息到BinaryMessenger时,BinaryMessenger会根据其入参channel找到对应的BinaryMessageHandler,并交由其处理。

Binarymessenger在Android端是一个接口,其具体实现为FlutterNativeView。

private final Map<String, BinaryMessageHandler> mMessageHandlers;
 ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值