使用处理程序重复任务比间隔花费更多时间

Repeating task with handler take more time than interval

我从服务器获取数据并且必须每 x 秒更新一次。 我使用 HandlerpostDelayed 函数执行此操作。

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 秒。 这种情况我该怎么办?

如果我们需要增加间隔,如何确定何时这样做?

您的处理程序过去常常在 10 之后调用服务器响应 sec.But 这完全取决于您的互联网速度以从服务器获取数据,这就是它需要很长时间的原因

您可以计算作业的持续时间并根据持续时间postDelayed您的处理程序。

例如:

startTime = System.currentTimeMillis();
//your job
duration = System.currentTimeMillis() - startTime;
mInterval = mInterval - duration