Я бы предложил переопределить методы onPause / onReume, как говорили другие. Не зная больше о потоке вашего приложения и взаимодействиях между операциями, я не могу дать гораздо больше информации, кроме догадок.
Однако, если ваши действия будут постоянными, моя рекомендация будет заключаться в том, чтобы лучше использовать Интенты при переключении между действиями.
Например, каждое действие должно иметь логический флаг «перехода». Поэтому, когда вы переходите от одного занятия к другому, вы настраиваете дополнительное намерение:
intent.putExtra("transition",true);
Далее в получающей деятельности: (в onCreate)
intent.getBooleanExtra("transition",false);
Таким образом, для каждого запускаемого действия вы можете узнать, пришло ли оно из другого действия или оно было запущено из панели запуска домашнего экрана. Таким образом, если он получает истинный переход, то onPause НЕ должно останавливать службу - это означает, что вы вернетесь к предыдущему действию после его возвращения. Если он не получает никаких дополнительных «переходов» или ложных переходов, то вы можете смело предположить, что под ним нет никаких действий, ожидающих смены текущего.
В первом действии вам просто нужно будет остановить службу, если вы переключаетесь на другое действие, которое вы сможете программно выяснить, если одно действие запускается из другого.