У меня есть намеренная служба, которая загружает несколько гигабайт видео. У меня есть кнопка "Стоп", чтобы остановить загрузку, если случайно нажать "Пуск" или что-то еще. Я знаю, что это было задано пару раз, но без рабочего ответа для меня.
Я пытаюсь вызвать 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);