Как запланировать фоновое задание - PullRequest
7 голосов
/ 14 января 2010

Кажется, есть несколько способов выполнить фоновую задачу.Мой пример использования - чтобы приложение получало подачу данных каждые x минут, независимо от того, работает ли мой графический интерфейс, и не зависимо от того, спит телефон или нет.

Я использую диспетчер аварийных сигналов для планирования намерения, соответствующего широковещательному приемнику.в методе onRecieve я запускаю службу (startService), которая порождает AsyncTask.Задача извлекает данные и сохраняет их, а затем останавливает службу ().

в методе onRecieve. Я получаю PARTIAL_WAKE_LOCK, перед запуском службы и непосредственно перед вызовом stopSelf () в службе, я освобождаю ее снова..

Это действительно лучший способ сделать это?Мне даже нужна служба в этом сценарии?

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

У кого-нибудь есть простой надежный метод для достижения той же цели?

1 Ответ

5 голосов
/ 14 января 2010

Я использую AlarmManager для планирования намерение соответствия вещательного приемника. в методе onRecieve я начинаю сервис (startService), который порождает AsyncTask. Задача извлекает данные и сохраняет его, а затем stopSelf () сервис.

Я бы предложил использовать IntentService вместо паттерна AsyncTask / stopSelf(), но в остальном это кажется правильным.

в методе onRecieve я получаю PARTIAL_WAKE_LOCK, перед началом сервис, и как раз перед звонком stopSelf () в сервисе, я выпускаю это снова.

Это имеет смысл. Я делаю то же самое в моем WakefulIntentService компоненте с открытым исходным кодом.

Это действительно лучший способ сделать это?

Вы, конечно, кажетесь близкими.

Мне даже нужен сервис в этом сценарий

Если то, что вам нужно сделать по расписанию, гарантированно займет около секунды, вы можете сделать это в BroadcastReceiver. В противном случае вам нужно, чтобы работа выполнялась в фоновом потоке, а BroadcastReceivers не может создавать фоновые потоки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...