Как сделать задачу Async выполняться несколько раз после некоторого интервала времени точно так же, как и Timer... На самом деле я разрабатываю приложение, которое автоматически загрузит все последние непрочитанные приветствия с сервера, и для этого мне нужно проверить наличие обновлений с сервера после некоторых фиксированных интервалов времени.... Я знаю, что это можно легко сделать с помощью таймера, но я хочу использовать async-задачу, которая, по моему мнению, более эффективна для приложений Android.
Как выполнять задачу Async повторно после фиксированных интервалов времени
Ответ 1
public void callAsynchronousTask() {
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
PerformBackgroundTask performBackgroundTask = new PerformBackgroundTask();
// PerformBackgroundTask this class is the class that extends AsynchTask
performBackgroundTask.execute();
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 50000); //execute in every 50000 ms
}
Ответ 2
//Every 10000 ms
private void doSomethingRepeatedly() {
Timer timer = new Timer();
timer.scheduleAtFixedRate( new TimerTask() {
public void run() {
try{
new SendToServer().execute();
}
catch (Exception e) {
// TODO: handle exception
}
}
}, 0, 10000);
}
Ответ 3
Вы можете просто обработчик:
private int m_interval = 5000; // 5 seconds by default, can be changed later
private Handle m_handler;
@Override
protected void onCreate(Bundle bundle)
{
...
m_handler = new Handler();
}
Runnable m_statusChecker = new Runnable()
{
@Override
public void run() {
updateStatus(); //this function can change value of m_interval.
m_handler.postDelayed(m_statusChecker, m_interval);
}
}
void startRepeatingTask()
{
m_statusChecker.run();
}
void stopRepeatingTask()
{
m_handler.removeCallback(m_statusChecker);
}
Но я бы рекомендовал вам проверить эту структуру: http://code.google.com/intl/de-DE/android/c2dm/. Другой подход: сервер будет уведомлять телефон, когда что-то будет готово (таким образом, сохраняя некоторую пропускную способность и производительность:))
Ответ 4
не было бы более эффективно создавать службу и планировать ее через диспетчер аварийных сигналов?