У меня есть служба намерений, которая загружает несколько гигабайт видео. У меня есть кнопка «Стоп», чтобы остановить загрузку, если вы случайно нажали «Пуск» или что-то в этом роде. Я знаю, что это было задано пару раз, но без рабочего ответа для меня.
Я пытаюсь позвонить stopService()
, не работает. Это просто вызывает IntentService.OnDestroy()
. Пробовал звонить stopSelf()
внутри onDestroy
, тоже не работает.
Я пытался иметь что-то вроде флага, но onHandleIntent не вызывается, если он уже запущен, он ждет завершения текущей работы и затем выполняется. И даже если бы это сработало, мне пришлось бы иметь что-то вроде гигантского оператора if, это отстой.
Является ли мой единственный вариант действительно переписать его в обычную службу?
//Отвечать
public class SyncService extends IntentService {
boolean isCanceled;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (intent.hasExtra("action")) {
// Set the canceling flag
isCanceled= intent.getStringExtra("action").equals("cancel");
}
return super.onStartCommand(intent, flags, startId);
}
@Override
protected void onHandleIntent(Intent intent) {
// Clean up the possible queue
if (intent.hasExtra ("action")) {
boolean cancel = intent.getStringExtra ("action"). Equals ("cancel");
if (cancel) {
return;
}
}
...
Get your inputStream from HttpUrlConnection or whatever
...
while ((bytesRead = in.read(buffer)) > 0) {
if (isCanceled) {
isCanceled = false;
break;
}
...
}
}
}
И запустить его с помощью
Intent intent = new Intent(context, SyncService.class);
intent.putExtra("action", "cancel");
context.startService(intent);