在后台增加 AsnycTask 计数的处理程序不会延迟

Handler to increase count in AsnycTask on the background isn't delaying

我正在尝试定期增加后台计数。

这是我在 AsyncTask 中的处理程序和 doInBackground 函数

protected Void doInBackground(Void... params) {
    while(true){
        handler.postDelayed(new Runnable() {




public void run() {

             count++;

            }
        }, 10000);

    }
}

当我执行此任务时,它会等待 10 秒,然后开始非常快地增加计数(每秒近 2k)。我想每 10 秒增加计数 1。

您的 while(true) 循环导致此问题。您实际上是在另一个线程中创建一个新线程,从而推迟了时间。您可以通过删除 while(true) 并在 run() 中调用 doInBackground() 来解决此问题。这就是处理程序保持循环的方式。这是一个例子:

handler.postDelayed(new Runnable() {
    public void run() {
            count++;
            doInBackground("");
        }
    }, 10000);

希望对您有所帮助!

如果您想每 X 秒执行一次操作,您可以使用处理程序。

private final static int INTERVAL = 10000;
Handler mHandler = new Handler();

Runnable mHandlerTask = new Runnable()
{
     @Override 
     public void run() {
          doSomething();
          mHandler.postDelayed(mHandlerTask, INTERVAL);
     }
};

void startRepeatingTask()
{
    mHandlerTask.run(); 
}

void stopRepeatingTask()
{
    mHandler.removeCallbacks(mHandlerTask);
}