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

时间:2016-05-22 12:48:14

标签: android android-asynctask android-handler

我试图定期增加对背景的计数。

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

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




public void run() {

             count++;

            }
        }, 10000);

    }
}

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

2 个答案:

答案 0 :(得分:1)

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

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

希望它有所帮助!

答案 1 :(得分:0)

如果你想每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);
}