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