Помещение файла SQLite - убедитесь, что все изменения сброшены и нет ввода-вывода в середине загрузки файла - PullRequest
0 голосов
/ 15 мая 2018

Мы используем компонент компонентов архитектуры Android для выполнения операций чтения / записи базы данных.

Мы знаем местоположение файла SQLite, который пишет Комната.

У нас есть требование: при выходе из приложения мы хотели бы запустить фоновый процесс (с помощью Android Jetpack WorkManager), чтобы загрузить файл SQLite в пользовательское облачное хранилище.

@Override
public void onPause() {
    super.onPause();

    if (this.isFinishing()) {
        // Use Android Jetpack WorkManager, to 
        // upload SQLite file written by Room to user cloud storage.

Наше беспокойство заключается в том, как мы можем убедиться непосредственно перед выполнением загрузки

  • Все изменения, выполненные Room, сбрасываются в файл SQLite.
  • В процессе загрузки файла SQLite нет операции чтения / записи для файла SQLite, чтобы избежать загрузки «наполовину записанного» (поврежденного) файла.

1 Ответ

0 голосов
/ 15 мая 2018

Вот решение, которое я бы предложил, но вы должны реализовать его по частям:

Во-первых, вам может потребоваться ProcessLifeCycle , который поможет вам определить, находится ли приложение на переднем плане или в фоновом режиме.

Пока приложение переходит в фоновый режим, запланируйте задание, которое выполняет следующие задачи:

Скопируйте базу данных во временное хранилище (я предпочитаю Cache Storage) Затем начните загрузку этой базы данных на сервер.

Таким образом, ваша база данных никоим образом не будет оставаться в несовместимом состоянии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...