2013-02-12 3 views
13

Я немного запутался в отношении использования IntentService.Android Как разместить несколько намерений в IntentService

  1. В документации указано, что IntentService ставит в очередь все намерения, отправленные ему, и обрабатывает их по одному за раз.
  2. Я посмотрел на code of IntentService, и я увидел, что onStartCommand() принимает намерение, вызывает OnStart() который отправляет его в виде сообщения намерений в очередь

Я уверен, что я прочитайте где-нибудь в документации, что onStartCommand() вызывается системой только один раз, если вы дважды выпускаете startService(), второй вызов не приведет к вызову onStartCommand().
Возможно, я ошибаюсь, потому что я искал эту документацию, и я не могу ее найти.
Это противоречит предыдущей концепции, в которой говорится, что вы можете ставить в очередь многие намерения в IntentService через onStartCommand().

Так что мне нужна помощь здесь, как мне помещать несколько намерений в IntentService?

Я вижу только два варианта:

  • Просто позвоните каждый StartService() с различными намерениями

  • вызовов непосредственно OnStart() или onStartCommand() (минуя startService())

ответ

13

Вы посылаете Intent вместе с Context.startService(), а Intent - тип, который вы ищите, - onHandleIntent().

В первый раз, когда вы вызываете startService(), вы получите вызванное сообщение onStartCommand(). Подумайте об этом как о конструкторе. Последующие вызовы на startService() не нужно запускать службу снова, так как она уже запущена; они просто приведут к большему количеству звонков в службу onHandleIntent().

+1

В соответствии с кодом IntentService (см. Ссылку в моем вопросе) вы увидите, что невозможно напрямую вызвать onHandleIntent(), только обработчик сообщений может это сделать. Системе необходимо вызвать либо onStart(), либо onStartCommand(). – ilomambo

+2

Да, это правильно. Все, что вам нужно сделать, это вызвать 'startService()' и реализовать 'onHandleIntent()' внутри службы. Система делает все остальное для вас, включая решение о том, как и когда начать сервис. –

+0

Sidenote: Означает ли это, что я могу перехватить намерение в очереди, переопределив * onStart() *? (Я знаю, это звучит плохо, так как * onStart() * устарел как API, но в принципе?) – ilomambo

Смежные вопросы