Повторение задачи с обработчиком занимает больше времени, чем интервал - PullRequest
1 голос
/ 10 февраля 2020

Я получаю свои данные с сервера и должен обновлять их каждые x секунд. Я делаю это с помощью функции Handler postDelayed.

private long mInterval = 10000;


  Runnable mStatusChecker = new Runnable() {
    @Override
    public void run() {
        try {
            takeServerResponse(); //with vary duration
        }catch (Exception e){
            itsRunning = false;
        } finally {
            if(mHandler!=null)  {
                mHandler.postDelayed(mStatusChecker, mInterval);
            }
        }
    }
};

Иногда получение новых данных может занять более X секунд. Что я могу сделать в этой ситуации?

Если нам нужно увеличить интервал, как определить, когда это сделать?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

Вы можете рассчитать продолжительность вашей работы и после задержки вашего обработчика на основе продолжительности времени.

Например:

startTime = System.currentTimeMillis();
//your job
duration = System.currentTimeMillis() - startTime;
mInterval = mInterval - duration
0 голосов
/ 10 февраля 2020

ваш обработчик использовал для вызова ответа сервера после 10 se c. Но все зависит от вашей собственной скорости rnet, чтобы получить данные с сервера, поэтому это занимает много времени

...