2014-10-18 6 views
0

Я планирую использовать IntentService для обработки. Служба запускается из широковещательного приемника, зарегистрированного в манифесте. Служба должна обновить db, чтобы операция была длинной (даже минутой). Для процессора я могу взять wakelock, но об ОС?IntentService для фоновой задачи

  1. Можно ли вызвать startForeground на intenservice?
  2. Интенсервис создается снова после убийства? Каково поведение по умолчанию? START_STICKY?
  3. Служба захвата блокировки db (блокировка java-блокировки ReentrantReadWrite), чтобы избежать одновременного доступа, если служба убита, блокировка освобождается? если нет, что я могу сделать?

ответ

1
  1. Как IntentSerivice расширяет Service нет ничего остановить вас от вызова startForeground(). Вы должны будете показать фактическое уведомление, хотя (Раньше был хак, который включал поддержку переднего плана без уведомления, но, к счастью, он был исправлен в 4.3).

  2. Поведение по умолчанию для IntentService: START_NOT_STICKY. Вы можете изменить его, вызвав setIntentRedelivery(true) в своем конструкторе или в другом месте.

  3. ReentrantReadWrite - это блокировка уровня java, а не блокировка уровня файла/db/OS. Это означает, что, как только процесс будет мертв, замок исчезнет. (Вы сказали «db lock», но я предполагаю, что это просто неточная формулировка - вы не блокируете БД каким-то образом, не так ли?).
+0

Нет, блокировка db означает просто захват блокировки записи в классе db :) – greywolf82