Внедрение простого сервиса в Android - PullRequest
0 голосов
/ 12 июля 2011

Допустим, я хочу создать службу (примечание: строчные буквы - я не подразумеваю android.app.Service) на устройстве Android, которая каждые 30 секунд запрашивает веб-API и предоставляет любые обновления для подписанной активности.Я ожидаю, что только одна активность будет подписана на эту услугу.Должен ли я

  1. Создать полную версию на android.app.Service и связать свою активность с этой службой?Или ...
  2. Создать облегченную "службу" (строчные буквы), которая в основном представляет собой поток, который реализует шаблон наблюдателя и периодически обновляет любые зарегистрированные наблюдатели (из которых должен быть только один) новой информацией.

URL-адреса примеров в Интернете также приветствуются.

Ответы [ 4 ]

1 голос
/ 12 июля 2011

Никогда не ожидайте, что ваша деятельность останется в живых

Ваша активность не должна запускать тему, за исключением кратковременной разгрузки работы. Система всегда может приостановить действие. Таким образом, вы не можете полагаться на активность, чтобы продолжать работать.

Это в значительной степени означает, что поток не разрешен. Также обратите внимание, что Thread.sleep не имеет точности. Это может привести к осечке и пробуждению слишком рано или слишком поздно. См. android: java.lang.Thread.sleep документацию

* * 1010

Оба факта в значительной степени разрушают идею, основанную на потоках. Я настоятельно рекомендую вам заглянуть в сервисную инфраструктуру Android.

1 голос
/ 12 июля 2011

Используйте IntentService класс / шаблон. Создайте onHandleIntent в своей деятельности, к которому ваш экземпляр android.app.Service также будет вызываться, и все готово. Его легкий и Android позаботится о большей части домашнего хозяйства.

http://developer.android.com/reference/android/app/IntentService.html

0 голосов
/ 12 июля 2011

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

0 голосов
/ 12 июля 2011

Я думаю, AsyncTask может сделать всю работу за вас.У вас есть метод doInBackgroud, где вы можете запрашивать ваш API и отправлять сообщения процесса, если хотите, и обновлять в onPostExecute.Там вы можете начать новый AsyncTask.

...