Остановка IntentService из действия

У меня есть IntentSerivce, который иногда работает в фоновом режиме, и в некоторых случаях это может быть довольно долгий процесс. Я даю пользователю возможность выйти из приложения, которое в основном просто останавливается и опрашивает и игнорирует любые GCM push-уведомления. Но если пришло push-уведомление, и IntentService требуется некоторое время, чтобы закончить то, что он должен (получает информацию с сервера и при необходимости отправляет уведомление пользователю, например, о получении нового сообщения или что-то в этом роде).

Вот в чем проблема: если пользователь решит «Выйти» из приложения, пока intentservice все еще работает, он все равно получит уведомление, которое мне не нужно. Я знаю, что для службы существует метод stopSelf(), но мне нужно остановить его в действии, когда я знаю, что пользователь «вышел» из приложения с помощью кнопки меню. Отправка еще одного intent в службу не работает, поскольку намерения ставятся в очередь, а вызов context.stopService(intent); в моей деятельности также не работает, так как еще я могу это остановить?


person tyczj    schedule 24.08.2012    source источник
comment
Возможный дубликат Немедленная остановка IntentService   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 14.02.2016


Ответы (2)


Вы передаете новый Intent в stopService(Intent) или исходный, используемый в startService(Intent). Передача исходного намерения должна остановить службу.

В противном случае вы можете использовать Handler для передачи службы Message. Пусть IntentService реализует интерфейс Handler.Callback и создаст новый Handler(Handler.Callback) в вашем Activity, передав ваш IntentService в качестве обратного вызова. Затем внедрите onHandleMessage() в свой IntentService для вызова stopSelf() и пусть ваш Activity передаст ему сообщение, когда вы хотите, чтобы он остановился.

person bennettaur    schedule 24.08.2012
comment
Откуда вы получаете экземпляр службы (я имею в виду экземпляр Handler.Callback), когда действие начинается с уведомления? - person LiMar; 31.10.2012

Ниже код отлично работает, чтобы остановить IntentService от Activity:

stopService(new Intent(getApplicationContext(), MyIntentService.class));
person Vikasdeep Singh    schedule 21.04.2015