Правильно звоните finish()
на все ваши действия, когда вы закрываете их. Если вы начали какие-либо действия с ожидаемым значением результата, обязательно завершите вызов setResult()
в этих действиях, прежде чем завершить.
Если у вас есть какие-либо потоки, запускающие циклы, сохраните глобальную переменную, указывающую, работает ли ваше приложение. Установите для этой переменной значение true, когда ваша деятельность возобновится (вызывает onResume()
), и установите для переменной значение false, когда ваша активность приостановится (onPause()
). Затем просто сделайте, чтобы циклы ваших потоков проверяли эту глобальную переменную перед циклом, чтобы убедиться, что они завершаются корректно после завершения вашей деятельности.
Кроме этого, ваши действия должны автоматически пытаться завершиться, когда пользователь нажимает кнопку «Назад» на последнем действии в стеке, завершая работу вашего приложения.