У меня есть приложение, которое позволяет пользователям вводить много данных на одном конкретном экране «Активность». Если пользователь по какой-либо причине неожиданно отходит от этого экрана, я сохраняю его данные в базе данных приложения SQLite. Это приложение было выпущено в течение почти 2 лет и никогда не сталкивалось с тайм-аутом ANR, но в течение последнего месяца я получил 2 отчета на рынке.
В одном случае проблема возникла при попытке закрыть базу данных. В другом случае проблема возникла при попытке открыть базу данных. Я вообще не могу воспроизвести проблему, но вижу точную последовательность выполняемых шагов, но моя проблема в том, что я не знаю, что я мог бы изменить. И то и другое касалось защиты мьютекса для базы данных. Я сам не создаю мьютекс, это системная вещь.
Обычно вызывается onPause, открывается база данных, я записываю данные в файл и закрываю базу данных. Насколько я понимаю, это правильный способ сделать что-то, если ваши данные не могут быть просто сохранены в SharedPreferences (что мои данные не могут быть).
Я не понимаю, почему открытие или закрытие базы данных заняло бы так много времени, так каковы мои варианты здесь? Мое единственное предположение состоит в том, что эти проблемы возникают у пользователей, которые использовали приложение в течение очень долгого времени, и, следовательно, их файлы базы данных стали чрезвычайно большими, и, возможно, системе потребуется больше времени для блокировки файла базы данных (я просто гадать здесь).
Я подумал о том, чтобы, возможно, запустить AsyncTask из onPause, но это кажется неправильным. Есть предложения?