Как вы сказали, вы не можете удерживать поток пользовательского интерфейса в ожидании бесконечного останова фонового потока.
Вы можете сделать следующие вещи.
1) Прервать поток в onPause (). (Это не сохранит никакой информации, если вы захотите во время очистки)
2) Если вы хотите сохранить некоторую информацию и выполнить чистый выход, вы можете запустить службу Androiod в onPause () и выполнить очистку там.
(Проверьте наличие логического флага в теме)
пример: псевдо-пример
void run(){
while(true){
if(bExit){
doCleanupWork();
}
//Do work
doWork();
}
}
void doCleanupWork(){
startCleanupService();
}
void onPause(){
bExit = true;
}
редактирует
3) Переопределите onBackPressed () класса Activity, чтобы он не выходил напрямую. Запустите AsyncTask и покажите пользователю диалоговое окно, указывающее обработку, когда вызовы очистки происходят в doInBackground (). Если вы не уверены, что очистка может повесить, вам нужно перепроверить код и при необходимости прервать поток после истечения времени ожидания.