Я разрабатываю приложение флаттера (в то время только для Android, но с поддержкой iOS, запланированной позже). Приложение работает двумя способами:
- Пользовательский интерфейс Flutter с большей частью бизнес-логики c (Изоляция переднего плана, запускается основным методом) (FG)
- Некоторые автоматические c задачи, выполняемые в фоновом режиме с использованием android WorkManager (который использует изоляцию фона флаттера) (BG)
- Оба изолята используют базу данных
Поскольку нам нужно использовать базу данных в " поточно-ориентированный способ, которым мы пытаемся использовать фреймворк базы данных Moor, с интерфейсом moor_ffi для взаимодействия с сервером SQLite.
Moor утверждает, что добился его «поточно-безопасности», создав третий Isolate (MoorIsolate). Этот изолятор - единственный, который общается с базой данных. Запросы, выполняемые в BG и FG, отправляются на этот изолятор с помощью SendPort / ReceivePort, выполняются и возвращаются вызывающей стороне Isolate.
Однако все примеры Moor предлагают порождение MoorIsolate из изолята FG. Что dr aws мое внимание к следующим проблемам.
Что происходит с MoorIsolate, если FG Isolate «умирает»
1.1 Если пользователь выходит, нажав кнопку кнопка назад на последнем экране в Навигаторе?
1.2 Если приложение не отображается в течение некоторого времени и ОС решает освободить его память.
1.3 Если пользователь "принудительно убивает" приложение в настройках (в идеале это должен быть единственный случай, когда MoorIsolate умирает)
В изоляте BG мы используем IsolateNameServer для создания MoorIsolate. Есть ли способ определить, работает ли Isolate?