Подтвердить что ты не робот

Как выполнять задачу Async повторно после фиксированных интервалов времени

Как сделать задачу Async выполняться несколько раз после некоторого интервала времени точно так же, как и Timer... На самом деле я разрабатываю приложение, которое автоматически загрузит все последние непрочитанные приветствия с сервера, и для этого мне нужно проверить наличие обновлений с сервера после некоторых фиксированных интервалов времени.... Я знаю, что это можно легко сделать с помощью таймера, но я хочу использовать async-задачу, которая, по моему мнению, более эффективна для приложений Android.

4b9b3361

Ответ 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

не было бы более эффективно создавать службу и планировать ее через диспетчер аварийных сигналов?