【发布时间】:2020-06-18 14:31:58
【问题描述】:
我正在开发一个 Flutter 应用程序(当时仅适用于 Android,但计划稍后支持 iOS)。该应用程序以两种方式运行:
- Flutter UI 与大部分业务逻辑(前台隔离,从 main 方法开始)(FG)
- 使用 android WorkManager(使用 Flutter Background Isolate)(BG)在后台执行的一些自动任务
- 两个分离株都在使用数据库
由于我们需要以“线程安全”的方式使用数据库,因此我们尝试使用 Moor 数据库框架,通过 moor_ffi 接口与 SQLite 服务器对话。
Moor 声称通过生成第三个 Isolate (MoorIsolate) 来实现其“线程安全”。此隔离是唯一与数据库对话的隔离。在 BG 和 FG 中执行的查询使用 SendPort/ReceivePort 发送到此隔离,执行并返回给调用者隔离。
但是,所有 Moor 示例都建议从 FG 隔离中生成 MoorIsolate。这引起了我对以下问题的关注。
-
如果 FG Isolate “死亡”,MoorIsolate 会发生什么
1.1 如果用户在 Navigator 的最后一屏按返回键退出?
1.2 如果APP一段时间不可见,操作系统决定释放内存。
1.3 如果用户在设置中“强制杀死”应用程序(理想情况下,这应该是 MoorIsolate 死掉的唯一情况)
在 BG 隔离中,我们使用 IsolateNameServer 来构造 MoorIsolate。有什么方法可以检测 Isolate 是否仍在运行?
【问题讨论】:
标签: flutter dart-isolates flutter-moor