Что делать, если doWakefulWork запускает другой сервис? - PullRequest
0 голосов
/ 04 мая 2011

Мне очень нравится раздел AlarmManager в книге CWAC Advanced для Android. Теперь я беспокоюсь о том, что работа моего приложения может быть убита, потому что у него нет блокировки пробуждения. Вот что меня беспокоит. Мое беспокойство рационально?

См. Код ниже. Что, если doWakefulWork должен запустить другой сервис? В этом случае другой службе необходимо установить WakeLock для продолжения работы, однако существует разрыв во времени между запуском службы и окончанием onHandleIntent, когда может быть освобожден wakelock!

@Override
final protected void onHandleIntent(Intent intent) {
 try {
  doWakefulWork(intent)
  }
 finally {
   getLock(this).release();
 }
}

Мой ответ: doWakefulWork должен выполняться в том же потоке, он не может запускать другие потоки или службы, если другие службы также не являются экземплярами WakefulIntentService.

Я прав?

1 Ответ

1 голос
/ 04 мая 2011

Если вы хотите, чтобы ваши другие службы содержали WakeLock, то да, они должны быть либо WakefulIntentService ИЛИ приобретать WakeLock самостоятельно.Если вас беспокоит время, когда вы отправляете намерение, и когда другая служба фактически получает блокировку, вам необходимо реализовать какой-либо механизм блокировки (т. Е. Заблокировать метод doWakefulWork от завершения до тех пор, пока другая служба не запустится, иприобрел замок)

...