Итак, я знаю, как выполнять фоновую задачу, я знаю, как выполнять периодическую задачу (используя дескриптор postdelayed и runnable), я также знаю, как выполнять задачу пользовательского интерфейса из фонового потока (через обработчик), но я не могу выполнить периодическая фоновая задача, которая выполняет некоторые действия в потоке пользовательского интерфейса.
Я пытаюсь каждую минуту выполнять какую-то фоновую задачу, в которой мне нужно сделать сетевой вызов. После завершения вызова, в зависимости от результата, мне нужно обновить пользовательский интерфейс. Я пытался сделать что-то вроде этого
private void DoTask() {
Thread thread = new Thread() {
public void run() {
Looper.prepare();
final Handler handler = new Handler();
handler.post(netRunnable);
Looper.loop();
}
};
thread.start();
}
Runnable netRunnable = new Runnable() {
@Override
public void run() {
handler.getLooper().prepare();
final Handler handler1 = new Handler(Looper.getMainLooper());
if ( do background work and check result){
handler1.post(new Runnable() {
@Override
public void run() {
//Do UI Task
}
});
}
handler.getLooper().loop();
handler.postDelayed(netRunnable, 60000);
}
}
Я понимаю, что в моей реализации могут быть некоторые фундаментальные недостатки, но я не знаю, как правильно выполнить эту задачу. Прямо сейчас он выдает ошибку, что Only one Looper may be created per thread
. Я понимаю, что он пытается сказать. Но может ли кто-нибудь предложить сделать это правильно.