Skip to content

platform-channel-demo ​

1. 实验目标 ​

用最小 Flutter + Android 实现验证 PlatformChannel 三类通道(对应 docs/05-bridge-hybrid/01):

  • MethodChannel:单次异步调用(Flutter 请求电量 → Native 返回)
  • EventChannel:Native 单向持续推事件(模拟网络状态变化,每 2 秒推一条)
  • BasicMessageChannel:双向消息(本文档说明,最小代码聚焦前两者)

2. 工程要点 ​

  • Flutter 侧:lib/topics/bridge_hybrid/platform_channel_demo/platform_channel_demo_page.dart
    • MethodChannel('com.example.app/battery').invokeMethod('getBatteryLevel')
    • EventChannel('com.example.app/connectivity').receiveBroadcastStream() 订阅事件流
  • Android 侧:android/app/src/main/kotlin/.../MainActivity.kt
    • MethodChannel.setMethodCallHandler 处理 getBatteryLevel
    • EventChannel.setStreamHandler 定时推送;onCancel 里必须清 eventSink 并停掉定时器(防泄漏)
  • 本 Lab 是 Flutter host 内嵌页面,入口:首页列表 → PlatformChannel 桥接演示

3. 运行方式 ​

bash
cd labs/flutter/host
flutter pub get
flutter run        # 连接设备/模拟器

4. 预期现象 ​

  • 点击"获取电量 (MethodChannel)":日志区打印 MethodChannel 返回电量: 83%
  • 点击"订阅事件流 (EventChannel)":每 2 秒打印一条 EventChannel 事件: wifi/5g/offline...
  • 退出页面:事件流自动停止(dispose 里 cancel() 触发 Native onCancel)

5. 常见误区 ​

误区实际情况
Channel 可以在任意线程调用消息收发必须走 Native 主线程,子线程调用需 Handler.post
EventChannel 不订阅也推送onListen 才建立推送,onCancel 必须清 eventSink 否则泄漏
高频大字节走 Channel 没问题序列化 + 主线程拷贝会掉帧,大字节改用 dart:ffi / Texture

6. 对应知识库文档 ​

7. 关键源码 ​

站点构建时间:2026/8/24 23:43:17