openharmony Flutter-OH 通道测试Demo 📅 发布时间:2026/7/8 3:39:41 👁️ 浏览次数: 欢迎大家加入开源鸿蒙跨平台社区openharmonyFlutter 通道测试 Demo一、三种通道对比通道类型通信模式适用场景MethodChannel方法调用异步一次性请求响应EventChannel事件流Stream持续数据推送BasicMessageChannel基本消息双向简单消息传递二、Flutter 端实现1. 通道定义// MethodChannel - 方法调用staticconstMethodChannel_methodChannelMethodChannel(com.example.test1/method);// EventChannel - 事件流staticconstEventChannel_eventChannelEventChannel(com.example.test1/event);// BasicMessageChannel - 基本消息staticconstBasicMessageChannelString_messageChannelBasicMessageChannel(com.example.test1/message,StringCodec());命名规范:包名/通道名2. MethodChannel 使用// 调用原生方法finalresultawait_methodChannel.invokeMethod(方法名,参数);// 示例获取平台版本finalversionawait_methodChannel.invokeMethod(getPlatformVersion);// 示例带参数调用finalresultawait_methodChannel.invokeMethod(sendData,{name:Flutter,value:123,});错误处理:try{finalresultawait_methodChannel.invokeMethod(方法名);}onPlatformExceptioncatch(e){// 处理平台错误print(错误码:${e.code});print(错误信息:${e.message});}3. EventChannel 使用// 监听事件流StreamSubscription?_subscription;voidstartListening(){_subscription_eventChannel.receiveBroadcastStream({param:初始参数,}).listen((event)print(收到事件:$event),onError:(error)print(错误:$error),onDone:()print(流结束),);}// 取消监听voidstopListening(){_subscription?.cancel();}4. BasicMessageChannel 使用// 设置消息处理器接收原生消息_messageChannel.setMessageHandler((String?message)async{print(收到:$message);returnFlutter 回复;});// 发送消息到原生finalreplyawait_messageChannel.send(Hello);print(原生回复:$reply);三、鸿蒙端实现1. MethodChannel 处理constmethodChannelnewMethodChannel(messenger.binaryMessenger,com.example.test1/method);methodChannel.setMethodCallHandler((call:MethodCall,result:MethodResult){switch(call.method){casegetPlatformVersion:result.success({platform:HarmonyOS,version:5.0});break;casesendData:constnamecall.argument(name)asstring;result.success({received:true,message:收到:${name}});break;casethrowError:result.error(ERROR_CODE,错误信息,{detail:详情});break;default:result.notImplemented();}});关键类型:类型说明MethodCall方法调用对象含method和参数MethodResult结果回调success()/error()/notImplemented()call.argument(key)获取参数值2. EventChannel 处理consteventChannelnewEventChannel(messenger.binaryMessenger,com.example.test1/event);eventChannel.setStreamHandler({onListen:(args:object,events:EventSink){// 开始发送事件events.success({type:connected});// 定时发送this.timersetInterval((){events.success({type:data,timestamp:newDate().toISOString()});},2000);},onCancel:(args:object){// 停止发送clearInterval(this.timer);}});3. BasicMessageChannel 处理constmessageChannelnewBasicMessageChannel(messenger.binaryMessenger,com.example.test1/message,newStringCodec());messageChannel.setMessageHandler((message:string,reply:Replystring){console.info(收到:${message});reply.reply(鸿蒙回复:${message});});四、完整通信流程MethodChannel 时序Flutter 鸿蒙 │ │ │── invokeMethod() ────────│ │ │── handleMethodCall() │ │ │──────── result.success()─│ │ │EventChannel 时序Flutter 鸿蒙 │ │ │── receiveBroadcastStream()│ │ │ │ │───────────┼── events.success() [多次] │ │ │ │── cancel()───────────────│── onCancel()五、关键要点注意点说明通道名必须一致Flutter 和鸿蒙端名称要完全相同类型安全ArkTS 需要显式类型转换as string内存管理EventChannel 记得取消订阅错误处理使用PlatformException捕获错误主线程通道通信在主线程耗时操作需异步六、测试 Demo 功能测试项操作预期结果获取版本点击按钮返回{platform: HarmonyOS, version: 5.0}发送数据点击按钮返回处理后的数据对象设备信息点击按钮返回复杂对象含多个字段测试错误点击按钮捕获PlatformException事件流开始监听每2秒收到一个事件消息通道发送消息收到鸿蒙回复七、快速开始// 1. 定义通道constplatformMethodChannel(com.example/channel);// 2. 调用原生finalresultawaitplatform.invokeMethod(方法名);// 3. 鸿蒙端处理methodChannel.setMethodCallHandler((call,result){result.success(返回数据);});
Ray 集群多用户资源隔离实践 Ray 集群多用户资源隔离在企业级 AI 平台中,多个团队共享同一个 Ray 集群是常见场景。如果缺乏有效的资源隔离机制,一个用户的大规模训练任务可能吞掉整个集群的 GPU,导致其他团队的推理服务直接瘫痪。本文将系统介绍 Ray 集群中实现多用户资… 2026/7/7 11:27:17
Ray + LanceDB + Daft 构建大规模向量数据分析管道 Ray LanceDB Daft 向量数据分析在大模型时代,向量数据的规模正在爆炸式增长。一个典型的图文检索系统可能需要管理数十亿条 Embedding 向量,同时还要支持高效的过滤、聚合和相似度检索。传统方案要么用 Milvus/Qdrant 等专用向量数据库但缺乏灵活的分析… 2026/7/3 3:22:50
四字节十六进制转化为单精度IEEE 754 浮点数 要将给定的字节序列解析为 IEEE 754 单精度浮点数(32位,4字节),我们首先需要了解 IEEE 754 单精度浮点数的格式,并按照它的规则进行转换。1. IEEE 754 单精度浮点数格式 IEEE 754 单精度 浮点数由 32 位(4… 2026/7/4 12:08:46
LLM进阶指南:从调用API到构建AI应用,开发者必须掌握 说实话,我刚开始接触LLM API的时候也是一脸懵——以为调个接口就完事了,结果发现Token怎么算、上下文怎么管理、Function Calling怎么用,全都是坑。 结果你猜怎么着?**深入研究了OpenAI、Google、Anthropic等平台的开发者文档后&… 2026/7/8 3:35:49
商标注册服务商哪家好 在闽南地区,很多企业在做品牌和产品时,常常会遇到一些知识产权方面的困扰。比如商标被抢注、外观设计被抄袭、专利没保护好导致亏损等。这些问题不仅会给企业带来经济损失,还会影响企业的品牌形象和发展。因此,选择一家专业的知识… 2026/7/8 3:33:49
2026网站开发哪家公司好 2026网站开发哪家公司好搜索平台、公司或排行信息,本质上反映了企业对不确定性的担心。页面能不能做出来只是第一层问题,后续谁维护、怎么更新、能否支撑私域流量和长期扩展,才是影响系统投入产出比的关键。企业建站可以理解为企业借助小程序… 2026/7/8 3:33:49
ChatMemory 分布式部署实战:集群环境下的对话记忆 上一篇:《你的 ChatMemory 卡顿?MySQL vs Redis 性能实测》 评论区有人问:“生产环境肯定要集群部署,你的方案支持吗?” 我想了想,这是个好问题。单机部署是 Demo,生产环境要集群,多个实例如何保证对话不丢失、记忆不分裂? 这篇就讲 ChatMemory 的分布式部署方案,两种实战方… 2026/7/8 3:27:48
破局 “肺癌之殇”:精准医疗赛道,云克隆助力肿瘤标志物科研攻坚 前言2026 年全球抗癌领域迎来阶段性成果,癌症防控整体数据持续向好。美国癌症协会最新发布统计报告显示,自 1991 年至今全球癌症总死亡率累计下降 4%,约 480 万患者因此重获生存机会。其中肺癌防控进步最为突出:男性肺癌死亡率相较… 2026/7/8 3:27:48
【SWAT+教程】12专题系统学习:从模型原理到QSWAT+实操,再到香溪河流域水文模拟完整案例 当前,水资源短缺、洪旱灾害频发、水文情势变化复杂等问题,已成为制约社会经济与生态可持续发展的重要因素。国内外研究表明,受全球气候变化与人类活动加剧的双重影响,流域水文过程发生了显著变化,水资源时空分布不均、… 2026/7/8 3:25:47
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58