Я использую SQLite с комнатой в своем проекте Android Studio.
Есть некоторые функции приостановки для работы с базой данных SQLite, некоторые функции приостановки в фоновой службе для изменения записей.
Будет ли заблокирована база данных SQLite?
Будет ли заблокирована база данных SQLite?
Да.
Обычно Room будет использовать WAL (упреждающая запись), а не режим журнала. то есть по умолчанию API 16+ будет использовать WAL, а в API 16 будет использоваться режим журнала.
В режиме WAL устройства чтения и записи обычно не блокируют друг друга. Чтобы процитировать документацию SQLite
WAL обеспечивает больший параллелизм, поскольку читатели не блокируют пишущих, а пишущий не блокирует читающих. Чтение и запись могут происходить одновременно.
Конечно, неявно с вышеупомянутыми писателями (LOCK) блочные писатели. Объясняется позже в документации: -
Писатели просто добавляют новый контент в конец файла WAL. Поскольку писатели не делают ничего, что могло бы помешать действиям читателей, писатели и читатели могут работать одновременно. Однако, поскольку существует только один файл WAL, в каждый момент времени может быть только один модуль записи.
Неявно, как и следовало ожидать, читатели не блокируют читателей.
Таким образом, если у вас есть несколько асинхронных приостановленных функций, которые обновляют базу данных, может возникнуть заблокированная база данных. Возможно, обратитесь к Создание функций приостановки
Если вы используете режим журнала, см. setJournalMode , тогда параллелизм (блокировка) является более строгим, см. Блокировка файлов и параллелизм
@HelloCW, отсюда и ссылка на Составление приостанавливающих функций.
Спасибо! Как избежать блокировки SQLite при использовании Room? Вы знаете, что функции приостановки в фоновой службе вышли из-под контроля, вы не знаете, когда запускается функция приостановки для изменения записей.