Android: несколько служб IntentServices — stopService

Я запускаю IntentService несколько раз с уникальным значением идентификатора. Когда я воссоздаю намерение и использую его для вызова stopService для текущего IntentService, вся очередь IntentService отменяется поверх остановки текущего IntentService. Кроме того, вызов stopService для IntentService, который находится в очереди, не имеет никакого эффекта.

Запустить службу:

Intent intent = new Intent(context, IntentService.class);
intent.putExtra("action", "scan");
intent.putExtra("id", id);
context.startService(intent);

Остановить службу

Intent intent = new Intent(context, IntentService.class);
intent.putExtra("action", "scan");
intent.putExtra("id", id);
context.stopService(intent);

Я хотел бы, чтобы IntentService со связанным идентификатором был остановлен/удален из очереди, а затем остальная часть очереди выполнила свой курс.


person meeeee    schedule 23.08.2012    source источник


Ответы (1)


Я думаю, вам, возможно, придется реализовать свой собственный тип службы намерений здесь. Глядя на код

Несмотря на то, что вы смотрите на метод stopSelf(int), вы можете сделать это вручную, если знаете, с чем создается каждое намерение.

mActivityManager.stopServiceToken(
                new ComponentName(this, mClassName), mToken, startId);

Итак, что-то вроде:

mActivityManager.stopServiceToken(
                new ComponentName(this, IntentService.class.getSimpleName()), null, mStartId);

Я не пробовал это, но может быть толчком в правильном направлении. Хотя я думаю, что это может ничего не сделать, так как только перестанет запускать службы.

В противном случае вам придется создать свой собственный IntentService, где вы сможете запускать удаление намерений. Возможно, стоит подтолкнуть @commonsguy

С уважением,
Крис

person Chris.Jenkins    schedule 23.08.2012
comment
@meeeee вы добились чего-нибудь с этим, мне было бы интересно увидеть результат, так как я думаю, что мне может понадобиться что-то подобное в будущем. - person Chris.Jenkins; 11.09.2012
comment
Да, я расширил обычную службу, где каждый раз, когда вызывается startService, я добавляю намерение в массив и запускаю рабочий поток, если он еще не запущен. Рабочий поток перебирает все намерения, я также вызываю startService с намерением, используя флаг для удаления другого намерения из очереди (списка массивов). - person meeeee; 17.09.2012
comment
@meeeee Хорошо, я подумал, что это может быть то, что нужно сделать. Звучит неплохо. - person Chris.Jenkins; 19.09.2012