Привет всем!
Есть 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.
Друзья, подскажите, почему так происходит..
Service не останавливается при вызове stopselfResult
Re: Service не останавливается при вызове stopselfResult
Мне сложно сказать почему так происходит. Думаю если ты сделаешь архивчик с кодом о котором идет речь и выложишь тут будт проще.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Service не останавливается при вызове stopselfResult
Ок. Выкладываю. Я специально делал минимальную программу только для проверки этой логики (думал в реальном приложении что-то лишнее накрутил).
- Вложения
-
- TestStartService2.zip
- (957.87 КБ) 239 скачиваний