Должен ли я использовать службу намерения? - PullRequest
2 голосов
/ 29 февраля 2012

У меня есть экран входа пользователя.Пользователь нажимает кнопку входа в систему, и я создаю IntentService, чтобы подключиться к моим службам отдыха и вернуть результат аутентификации.

Теперь вот функциональность, которую я хочу достичь: если действие приостановлено (то есть уходит в фоновый режим)) тогда служба намерений все еще должна работать, и она работает.Но если я использую диспетчер задач, чтобы убить приложение, служба намерений должна остановиться, хотя сейчас это не так.Он продолжает выполнение onHandleIntent до завершения.Если я вручную вызываю stopSelf(), вызывается onDestroy(), но метод onHandleIntent продолжает выполняться.Как заставить onHandleIntent остановиться?Вызов «return» не является опцией, поскольку он может быть захвачен одним вызовом метода rest.

Должен ли я использовать службу намерений для этой функции или что-то еще (например, службу или асинхронную операцию)?

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Прежде всего, если ваша служба делает что-то, что вы хотите сделать, пока ваше приложение работает на переднем плане, тогда вам не нужна служба.Ваша деятельность или диалог могут просто создать поток для выполнения вашей задачи, и эти потоки завершатся, когда закончится ваше приложение, так как они находятся в области задач вашего приложения.В противном случае, для задач, которые вы хотите выполнять постоянно, когда пользователь может делать что-либо на устройстве, обязательно используйте Сервис.

Я не уверен, почему «обратный вызов» не подходит для вас?Под этим я предполагаю, что вы имеете в виду проверку условия и выход из цикла или блока, если условие выполняется.Обычно так должны заканчиваться потоки (в службах или где-либо еще) (хотя существуют и другие подходы ).Поток вашей службы может прослушивать конкретное событие, которое произошло (например, если действие было уничтожено, путем установки свойства в файле или базе данных при вызове действия onDestroy, хотя, если это то, что вы хотите, то, вероятно, следуетНЕ использовать Сервис), и тогда run() может вернуться изящно.

Но если это задача, которую вы хотите выполнить независимо от того, что пользователь делает на своем устройстве (внутри или вне вашего приложения), тогдаэто должна быть задача, которую нельзя прерывать извне.Это должно продолжаться, пока не будет сделано.

Может быть, вы могли бы лучше определить, когда вы хотите, чтобы эта служба была остановлена?

0 голосов
/ 29 февраля 2012

остановите это в вашем onDestroy() методе

...