Служба резервного копирования Android - когда и как часто делать резервные копии?

Я хочу сделать резервную копию данных своего приложения с помощью службы резервного копирования Android, но меня беспокоит использование сети. У меня есть около 500 КБ данных, которые необходимо загружать для каждой операции резервного копирования. Немного, но если резервное копирование выполняется 10 раз в день, оно может легко достичь 5 МБ.

У меня вопрос: когда и как часто Android решает выполнять резервное копирование? В документации упоминается только «в подходящее время в будущем» после того, как я позвоню dataChanged(). Он не объясняет, какие условия составляют «благоприятное время».

Вы можете запросить операцию резервного копирования в любое время, позвонив dataChanged(). Этот метод уведомляет диспетчер резервного копирования о том, что вы хотите создать резервную копию своих данных с помощью агента резервного копирования. Затем диспетчер резервного копирования вызывает onBackup() метод вашего агента резервного копирования в подходящий момент в будущем.


person Andree    schedule 24.02.2013    source источник
comment
ты нашел ответ? Возможно, некоторые журналы помогут собрать некоторую статистику.   -  person LA_    schedule 31.10.2014
comment
@Andree: У меня такой же вопрос. У тебя еще есть ответ? Для моего дела. У меня загружено около 1 МБ данных (локальные данные пользователя sqlite) для каждой операции резервного копирования.   -  person Loc    schedule 03.01.2015
comment
@ Лок Ха: Извините, я не знал. Я назначу награду за этот вопрос, чтобы привлечь больше внимания.   -  person Andree    schedule 03.01.2015


Ответы (2)


Ваш вопрос состоит из двух частей:

  1. Когда
  2. Как часто

Начнем с пункта 2: как часто. Я думаю, что документация на это достаточно ответит. Каждый раз, когда ваше приложение вызывает метод dataChanged(), существует возможность резервного копирования. Таким образом, было бы разумно ограничить частоту вызовов этого метода. Как с этим справиться - решать вам. Один из подходов, который вы, возможно, захотите рассмотреть, - вызывать это только для значительных / важных изменений данных в вашем приложении. То есть не вызывайте его для изменения пользовательских предпочтений (например, цвета фона), но вызывайте его для любых транзакционных данных.

Что касается пункта 1, когда: на него труднее ответить. В документации об этом нет никаких обязательств. Это дает Android возможность изменять этот алгоритм, не нарушая ожиданий разработчиков. Я действительно думаю, что разумно предположить следующее: резервное копирование, вероятно, произойдет быстро, возможно, в ближайшее время, когда возникнут соответствующие условия. Если бы это не произошло «скоро», тогда это была бы не очень полезная услуга, не так ли? Вероятно, есть несколько простых условий, которых ждет Android (только предположение, но это могут быть доступные потоки, доступное сетевое соединение без другой сетевой активности). Обратите внимание, что в документации указано: «будет выполнено резервное копирование с использованием любого транспорта, включенного на устройстве». Похоже, это сделано для того, чтобы резервное копирование произошло как можно раньше.

person EJK    schedule 03.01.2015
comment
Хороший ответ на широкий и сложный вопрос (потому что в документации ничего не сказано, поэтому только Google знает об этом). Я согласен с обоими вашими точками зрения. - person shkschneider; 06.01.2015
comment
На самом деле, как часто это происходит, зависит от версии Android. До Android L первый проход резервного копирования выполнялся примерно через 12 часов после настройки устройства; затем после этого резервное копирование будет происходить в течение ~ 1 часа после любого приложения с именем dataChanged (). В более поздних версиях Android все стало немного проще; это больше похоже на 4 часа от dataChanged () до фактического запуска резервного копирования. Это для более старого API ключа / значения. Резервное копирование полных данных, новое в Android M, запускается только тогда, когда устройство находится в режиме ожидания и подключено к Wi-Fi. - person ctate; 27.12.2015

Я углубился в исследование службы Android Backup Manager и обнаружил следующее:

  1. Согласно «Разделу запроса резервного копирования» в http://developer.android.com/guide/topics/data/backup.html «Если вы вызываете dataChanged () несколько раз подряд, прежде чем Backup Manager запросит резервную копию от вашего агента, ваш агент все равно получит только один вызов onBackup ()».

Я интерпретирую это, поскольку каждый вызов DataChanged () в нашем приложении уведомляет службу диспетчера резервного копирования через транспорт. Служба диспетчера резервного копирования выполнит только ОДИН вызов onBackup () агента резервного копирования нашего приложения, даже если DataChanged вызывается несколько раз до того, как служба диспетчера резервного копирования ответит, когда она хочет (см. Пункт 2 ниже о частоте ответа диспетчера резервного копирования).

  1. Согласно этому тестеру (я также только что провел тест частоты резервного копирования): https://advancedweb.hu/2014/12/09/practical_measurement_of_the_android_backup_manager/ Служба диспетчера резервного копирования отвечает каждый час (я также доказал это в своих тестах), если хотя бы один DataChanged () был вызван в промежутке между часами с момента получения последних данных резервный.
person J Rocks    schedule 11.02.2016