Итак, я пытаюсь создать фоновую задачу, которую нужно запускать каждый час в приложении Android. Это довольно сложная задача, которая занимает около 5-10 минут, чтобы завершить sh, и прямо сейчас она работает в потоке пользовательского интерфейса, что, конечно, не очень хорошо, потому что вешает все приложение. Я попытался сделать следующее в моем MainActivity onCreate:
new Thread(new Runnable() {
private Handler HeavyTaskHandler = new Handler(Looper.getMainLooper());
public void run(){
final TextView updatedTxt = findViewById(R.id.txt);
updatedTxt.post(new Runnable() {
@Override
public void run() {
updatedTxt.setText("Performing cleanup..");
}
});
HeavyTask(); // <-- This method runs for 5 - 10 minutes
updatedTxt.post(new Runnable() {
@Override
public void run() {
updatedTxt.setText("Done..");
}
});
HeavyTaskHandler.postDelayed(this, HeavyTaskCycle);
}
}).start();
У меня две проблемы с указанным выше
- Он отлично работает в первый раз, и задача выполняется в фон хорошо, не вешая поток пользовательского интерфейса. Однако после этого первого раза и при следующем запуске поток пользовательского интерфейса снова зависает при запуске. Что мне не хватает?
- Обратите внимание, что перед вызовом метода HeavyTask () я пытаюсь установить текст TextViews на «Выполнение очистки ..» .. Это никогда не отображается, только «Готово ..», которое происходит после выполнения метода HeavyTask (). Как сделать так, чтобы сообщение появилось и раньше?