Service не останавливается при вызове stopselfResult

Ответить
JaguaR
Сообщения: 3
Зарегистрирован: 08 июл 2013, 14:12

Service не останавливается при вызове stopselfResult

Сообщение JaguaR » 08 июл 2013, 15:08

Привет всем!

Есть Service, в onStartCommand возвращаю START_REDELIVER_INTENT для восстановления незавершенных вызовов, сохраняя Intent. В onStartCommand создаю новый поток и запихиваю его в пул ExecutorService для поочередного выполнения (executor = Executors.newFixedThreadPool(1)), сохраняя startId в классе потока. По завершению работы потока (в run()) вызываю stopSelfResult(startId). Поток знает свой startId.

Из Activity делаю 2 вызова запуска сервиса, соответственно в сервисе 2 раза срабатывает onStartCommand и создает 2 потока с startId 1 и 2. По завершению первого потока (startId = 1) stopselfResult = false, по завершению второго потока stopselfResult = true, т.к. startId=2 является последним вызовом и сервис останавливается. Все ок.

Проблема в следующем :
Ничего не меняю в вызовах. Специально убиваю приложение сразу после получения двух вызовов onStartCommand и запуска первого потока (startId = 1). Жду когда сервис восстановится и восстановит незавершенные вызовы.. так и происходит.. Сервис создается (onCreate()), 2 раза срабатывает onStartCommand (на входе имею startId = 1 и startId = 2 и восстановленные Intent-ы), создаются потоки и отсылаются на выполнение в ExecutorService. По завершению первого потока (startId = 1) stopselfResult = false, по завершению второго потока (startId = 2)... внимание... stopselfResult = false... и соответственно сервис НЕ ОСТАНАВЛИВАЕТСЯ.. Как так?? Сервис останавливает только принудительный вызов stopselfResult(3).... Но откуда взялся третий вызов onStartCommand ? StartId были только 1 и 2.

Друзья, подскажите, почему так происходит..

Аватара пользователя
anber
Сообщения: 584
Зарегистрирован: 10 июн 2013, 15:05
Откуда: UA

Re: Service не останавливается при вызове stopselfResult

Сообщение anber » 09 июл 2013, 14:08

Мне сложно сказать почему так происходит. Думаю если ты сделаешь архивчик с кодом о котором идет речь и выложишь тут будт проще.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.

JaguaR
Сообщения: 3
Зарегистрирован: 08 июл 2013, 14:12

Re: Service не останавливается при вызове stopselfResult

Сообщение JaguaR » 09 июл 2013, 15:17

Ок. Выкладываю. Я специально делал минимальную программу только для проверки этой логики (думал в реальном приложении что-то лишнее накрутил).
Вложения
TestStartService2.zip
(957.87 КБ) 239 скачиваний

Ответить