Служба резервного копирования Android - когда и как часто нужно делать резервную копию?
Я хочу сделать резервную копию данных моего приложения с помощью службы резервного копирования Android, но меня беспокоит использование сети. У меня около 500 Кбайт данных, которые необходимо загрузить для каждой операции резервного копирования. Не много, но если резервное копирование выполняется 10 раз в день, оно может легко достигнуть 5 МБ.
Мой вопрос: когда и как часто Android решает выполнить резервное копирование? В документации только упоминается "в подходящее время в будущем" после вызова dataChanged()
. Он не объясняет, какие условия составляют "подходящее время".
Вы можете запросить операцию резервного копирования в любое время, позвонив dataChanged()
. Этот метод уведомляет диспетчер резервного копирования, который вы хотите для резервного копирования ваших данных с помощью резервного агента. Затем Менеджер резервного копирования вызывает метод резервного копирования onBackup()
в подходящее время в будущее.
Ответы
Ответ 1
На ваш вопрос есть две части:
Начните С# 2, , как часто. Я думаю, что документация достаточно ответила на это. Каждый раз, когда ваше приложение вызывает метод dataChanged()
, существует возможность резервного копирования. Таким образом, было бы разумно ограничить частоту вызовов этого метода. Это зависит от вас, как справиться с этим. Один из подходов, который вы, возможно, захотите рассмотреть, чтобы назвать это только для важных/важных изменений данных в вашем приложении. То есть, не назовите его для изменений пользовательских настроек (например, цвет фона, например,), но вызывайте его для каких-либо транзакционных данных.
Что касается # 1, , когда: это труднее ответить точно. Документация не имеет отношения к этому вопросу. Это дает Android свободу менять этот алгоритм, не нарушая никаких ожиданий разработчиков. Я думаю, что разумно предположить следующее: резервное копирование, скорее всего, произойдет быстро, возможно, в ближайшее время условия будут подходящими. Если это не произойдет "скоро", то это не будет очень полезным сервисом, не так ли? Вероятно, есть некоторые простые условия, ожидающие Android (просто предположение, но это могут быть доступные потоки, доступное сетевое подключение без какой-либо другой сетевой активности). Обратите внимание, что в документации указано, что "она будет поддерживать резервное копирование с использованием того, какой транспорт включен на устройстве". Похоже, что он предназначен для того, чтобы сделать резервную копию как можно раньше.
Ответ 2
Я уже подробно изучил службу Android Backup Manager и обнаружил следующее:
- В соответствии с "Запрос раздела резервного копирования" в http://developer.android.com/guide/topics/data/backup.html
"Если вы вызываете dataChanged() несколько раз подряд, прежде чем Менеджер резервного копирования запросит резервную копию вашего агента, ваш агент все равно получит только один вызов onBackup()."
Я интерпретирую это так, как каждый вызов DataChanged() в нашем приложении уведомляет службу диспетчера резервного копирования через транспорт. Служба Backup Manager будет выполнять только один звонок для нашего агента резервного копирования приложений onBackup(), даже если DataChanged вызывается несколько раз, прежде чем служба диспетчера резервного копирования ответит, когда захочет (см. Пункт 2 ниже на частоте ответа диспетчера резервного копирования).
- В соответствии с этим тестером (я также запускал частотный тест резервной копии только сейчас): https://advancedweb.hu/2014/12/09/practical_measurement_of_the_android_backup_manager/
Служба Backup Manager отвечает каждый час (я также доказал это в своих тестах), если по крайней мере один DataChanged() был вызван между часом с момента последнего резервного копирования данных.