我正在开发一个颤振应用程序(当时仅适用于 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 如果用户在导航器的最后一个屏幕上按返回按钮退出?
1.2 如果APP一段时间不可见,操作系统决定释放内存。
1.3 如果用户在设置中“强制杀死”应用程序(理想情况下,这应该是 MoorIsolate 死掉的唯一情况)
在 BG 隔离中,我们使用 IsolateNameServer 来构造 MoorIsolate。有什么方法可以检测 Isolate 是否仍在运行?