Flutter Isolate 实战
Dart 单线程事件循环保证 UI 顺滑,CPU 密集任务必须 offload。
compute 与 Isolate.run
dart
final parsed = await Isolate.run(() => heavyParse(bytes));Flutter 3.7+ 推荐 Isolate.run 替代部分 compute 场景,语义更清晰。
双向通信
dart
final port = ReceivePort();
await Isolate.spawn(worker, port.sendPort);
port.listen((msg) => print(msg));复杂流水线可引入 IsolateNameServer 做注册发现。
常见误区
- 试图在 Isolate 间共享可变对象(应序列化消息)。
- 在 UI Isolate 做图像解码(用
decodeImageFromList仍可能卡帧,应后台化)。
Isolate 是「无共享内存的 actor」——理解这一点,并发设计会简单很多。