flutter
runtime_error
ai_generated
true
未处理的异常:IsolateSpawnException:无法发送消息:SendPort 已关闭
Unhandled exception: IsolateSpawnException: Failed to send message: SendPort is already closed
ID: flutter/isolate-send-port-closed
80%修复率
83%置信度
1证据数
2024-01-05首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| Flutter 3.13.0 | active | — | — | — |
| Dart 3.1.0 | active | — | — | — |
根因分析
尝试通过已关闭的 SendPort 发送消息,通常是因为接收隔离已终止或端口已被释放。
English
An attempt was made to send a message via a SendPort that has been closed, typically because the receiving isolate has terminated or the port was disposed.
官方文档
https://api.dart.dev/stable/3.1.0/dart-isolate/Isolate-class.html解决方案
-
Check if the receiving isolate is still alive before sending. Use a shared flag or a ping mechanism: if (receivePort.isClosed) { await spawnIsolate(); } then send. -
Implement a reconnection strategy: when the error occurs, close the old SendPort, spawn a new isolate, and recreate the port pair. Example: isolate = await Isolate.spawn(entryPoint, receivePort.sendPort); sendPort = isolate.controlPort;
-
Use a dedicated communication manager that monitors isolate lifecycle and automatically re-establishes ports on termination.
无效尝试
常见但无效的做法:
-
Increase the size of the isolate's message queue.
95% 失败
The error is not about queue capacity but about the port being closed; queue size does not affect closed ports.
-
Wrap the send call in a try-catch and ignore the error.
80% 失败
Ignoring the error leads to silent data loss; the root cause (port closure) remains unaddressed.