В моем приложении хранятся все пользовательские данные и настройки в базе данных SQLite, которые я бы хотел сохранить, если пользователь получает новый телефон, переустанавливает или выполняет factory reset. Я прочитал в Android Data Backup Guide и их Android Служба резервного копирования, но все еще есть некоторые вопросы, прежде чем я начну.
- Восстановлены ли данные во время установки или при первом запуске моего приложения?, т.е. будет ли файл существовать до того, как будет вызван код для моего основного действия?
- Если мой класс SQLiteOpenHelper уже обрабатывает обновления, есть ли что-то еще, что мне нужно сделать для восстановления старого db? Я предполагаю, что нет, если db существует до запуска моего приложения.
- Я столкнулся с проблемами concurrency при резервном копировании, потому что BackupManager требует времени? Если пользователь вводит новые данные, и я вызываю
dataChanged()
, а затем снова повторяется, прежде чем BackupManager вызоветonBackup()
, как будут обрабатываться эти данные? Будет ли BackupManager просто создавать резервную копию последней версии базы данных (которая должна включать оба изменения)? - С какими проблемами я столкнусь, пытаясь создать резервную копию/восстановить базу данных SQLite. Я видел, как разработчики говорят, что база данных на одном устройстве может быть несовместима с базой данных на другой. Я хотел бы просто создать резервную копию базы данных с помощью
FileBackupHelper
, потому что выглядит довольно просто. По крайней мере, один разработчик, по-видимому, решил, по крайней мере, некоторые проблемы совместимости, отключив запись записи Ahead Ahead. Если я возьму такой подход, какой бы показатель я мог ожидать? Если это очень важно, я могу перейти к преобразованию в файл CSV и обратно во время процесса. - Если сбой восстановления не удается, я могу его поймать, сообщить пользователю и сохранить копию проблемных данных для хранения? Для устранения неполадок и информирования пользователя.
- Операция резервного копирования "не является потоковой". Уточните, как обращаться. Android говорит,
Чтобы ваш агент резервного копирования не читал или не записывал ваши файлы одновременно с вашими действиями, вы должны использовать синхронизированные операторы каждый раз, когда выполняете чтение или запись.
- Означает ли это, что я должен помещать каждую запись/запись в мою базу данных в оператор
synchronized
? т.е. я должен добавить это в каждое место, где загружается моя активность с db или записывать информацию на нее? Это много мест. - Или это означает, что только код резервного копирования должен использовать
synchronized
?
Спасибо за помощь. Я просто хочу сделать это правильно и поддерживать своих пользователей счастливыми, когда они получат новые телефоны в это Рождество!