Android: не могу решить, как управлять фоновой задачей - PullRequest
0 голосов
/ 09 ноября 2010

У меня есть задача, которую нужно запустить в фоновом режиме в моем приложении для Android. Он читает данные по сети и заполняет базу данных. Запуск может занять несколько минут.

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

Это модальная операция; для пользователя не имеет смысла взаимодействовать с приложением во время импорта.

Моя первая попытка - использовать ASyncTask с диалоговым окном Progress для достижения модальности, но это явно нарушает требование «не прерывать». Я мог бы обойти проблему поворота экрана с помощью ASyncTasks, но я не думаю, что это заходит достаточно далеко.

В данный момент я не уверен, должен ли это быть ASyncTask, Сервис, IntentService, какая-то их комбинация или что-то совсем другое. Вы можете помочь мне решить?

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

Я бы запустил его как службу и, кроме того, на моем сервере также была бы чистая БД SQLite, заполненная данными, которые собираются получить клиенты, чтобы я мог создать своего рода подпись. Попросите клиентов проверить правильность подписи БД. Если подпись не совпадает с подписью сервера, повторно инициализируйте процесс заполнения базы данных.

Это просто идея. Я понятия не имею, будет ли это возможно с тем, что вы пытаетесь сделать, или нет.

0 голосов
/ 09 ноября 2010

В этом случае вам лучше пользоваться услугами.Среда выполнения Android не будет работать, пока доступно достаточно памяти.В случае, если это убивает службу, вы можете сохранить состояние в пакете, и система перезапустит процесс как можно скорее, чтобы вы могли возобновить процесс, если это возможно для вашего решения:

Основы Android, Сервисный раздел

Тогда легко обмениваться данными со службой, например, показывать ход выполнения / уведомления и т. Д., Используя реестр дескрипторов, как предлагает Марк Бреди в своем прототипе службы Android

...