Flutter, Moor и WorkManager - PullRequest
       16

Flutter, Moor и WorkManager

1 голос
/ 18 июня 2020

Я разрабатываю приложение флаттера (в то время только для 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 мое внимание к следующим проблемам.

  1. Что происходит с MoorIsolate, если FG Isolate «умирает»

    1.1 Если пользователь выходит, нажав кнопку кнопка назад на последнем экране в Навигаторе?

    1.2 Если приложение не отображается в течение некоторого времени и ОС решает освободить его память.

    1.3 Если пользователь "принудительно убивает" приложение в настройках (в идеале это должен быть единственный случай, когда MoorIsolate умирает)

  2. В изоляте BG мы используем IsolateNameServer для создания MoorIsolate. Есть ли способ определить, работает ли Isolate?

1 Ответ

0 голосов
/ 22 июня 2020

После общения с разработчиком moor и моего собственного теста c я пришел к следующему выводу:

  • Если изолят умирает, все изоляты, порожденные из него, умирают вместе. Это означает, что если MoorIsolate порождается из изолята FG, а изолят FG остановлен любым методом, MoorIsolate будет d ie вместе.
  • moor_ffi отправляет поточно-безопасную версию sqlite для android. Это означает, что можно создавать MoorIsolate в FG и отдельно MoorIsolate (или вообще не MoorIsolate) для BG.
  • IsolateNameServer - это единственный способ передавать порты между изолятами FG и BG. Однако условия гонки все же могут быть.
...