Как заставить IntentService немедленно остановиться с помощью кнопки отмены из действия?

У меня есть IntentService, который запускается из действия, и я хотел бы иметь возможность немедленно остановить службу из действия с помощью кнопки «Отмена» в действии. Как только эта кнопка «отмена» нажата, я хочу, чтобы служба прекратила выполнение строк кода.

Я нашел ряд вопросов, похожих на этот (, то есть здесь , здесь , здесь , здесь), но нет хороших ответов. Activity.stopService()и Service.stopSelf()выполняют метод Service.onDestroy()немедленно, но затем позволяют коду в onHandleIntent()завершиться до конца, прежде чем уничтожить службу.

Поскольку, по-видимому, нет гарантированного способа немедленно завершить поток службы, единственное рекомендуемое решение, которое я могу найти(здесь)состоит в том, чтобы иметь логическую переменную-член в службе, которую можно переключать в методе onDestroy(), а затем иметь почти каждую строку кода в onHandleIntent(), заключенную в собственное предложение «if», смотрящее на эту переменную. Это ужасный способ написания кода.

Кто-нибудь знает лучший способ сделать это в IntentService?

43
задан Stevoisiak supports Monica 25 August 2017 в 15:44
поделиться