Является ли потокобезопасным метод onStartCommand(..) IntentService?

У меня есть класс IntentService, который можно запускать из разных мест сложного приложения. Действия, фон Темы, другие услуги. Я хотел бы сохранить счетчик того, сколько раз вызывалась служба. Я использую частную переменную int в своем классе IntentService, чтобы отслеживать это, я увеличиваю ее из моего onStartCommand(...).

Мне просто пришло в голову, что, поскольку метод onStartCommand(...) можно вызывать из различных асинхронных потоков, это может быть не потокобезопасным решением. Итак, вопрос в том, нужно ли мне обернуть доступ к этой переменной счетчика в синхронизированном блоке, или реализация IntentService onStartCommand(...) позаботится об этом за меня?

В качестве примечания я знаю, что могу безопасно увеличить переменную из onHandleIntent (...), но мне нужно подсчитывать фактические запросы, а не выполненные намерения.


person András Szepesházi    schedule 24.06.2012    source источник


Ответы (1)


Мне просто пришло в голову, что, поскольку метод onStartCommand(...) можно вызывать из различных асинхронных потоков, это может быть не потокобезопасным решением.

onStartCommand() всегда вызывается в основном потоке приложения в любой службе. Вы не можете вызываться с onStartCommand() в двух потоках одновременно.

person CommonsWare    schedule 24.06.2012
comment
Учиться новому каждый день. Спасибо! - person András Szepesházi; 24.06.2012
comment
@digitizedx: что не является потокобезопасным? onStartCommand() есть, поскольку он вызывается только в основном потоке приложения. - person CommonsWare; 11.07.2017
comment
Извините, я не был ясен. Вероятно, этот вопрос не связан с этим вопросом, у меня тоже похожая проблема, я запускаю службу с широковещательного приемника. В какой-то момент я получаю две трансляции одновременно. Я вижу, что onCreate() поставщика контента, связанного с приложением, вызывается дважды. Поэтому я сомневаюсь, что startService не является потокобезопасным, потому что он пытается создать службу дважды. - person digitizedx; 11.07.2017