Синхронизация с ASyncTask на андроид - PullRequest
0 голосов
/ 03 апреля 2011

Я думаю о реализации синхронизации в моем приложении для Android с ASyncTask и AlarmManager. Попытка сделать то же самое с SyncAdapter, но это только усложняет процесс и имеет другие недостатки (требуется ContentProvider, ручная синхронизация кажется невозможной, если автоматизирован, пользователь нужен и т. Д.).

Итак, у меня сейчас вопрос с ASyncTask - скажем, он запускается каждые 24 часа. Но если в это время нет подключения к Интернету, синхронизация не произойдет. В следующий раз попытка произойдет через 24 часа. Что я могу сделать, чтобы избежать этого? То есть если уже прошло 24 часа, то при любом подключении к Интернету задача должна быть запущена. После этого момента следующие 24 часа будут засчитаны. Например,

sync 1 - day 1 12:00 (successful)
sync 2 - day 2 12:00 (failed - no internet connection)
sync 3 - day 2 20:00 (successful, internet connection appeared)
sync 4 - day 3 20:00 (successful)

Поверьте, я могу либо выполнять свою задачу чаще (например, каждые 30 минут) и сохранять где-то время последнего обновления. Или я могу прослушать событие, когда появляется интернет-соединение. Каков наилучший подход? Или есть какой-то стандартный функционал для того же самого?

1 Ответ

1 голос
/ 03 апреля 2011

Я бы пошел с зарегистрированным BroadcastListener, чтобы выполнить синхронизацию, когда интернет-соединение доступно. Вы можете использовать SharedPreferences, чтобы указать для этого слушателя, что синхронизация необходима - потому что, я думаю, вам нужно зарегистрировать этого слушателя в манифесте, я думаю, что нет способа обработать это динамически.

Таким образом, вы можете быть уверены, что синхронизация произойдет, если доступно сетевое соединение, в то время как 30-минутный опрос может упустить шанс.

...