我试图定期增加对背景的计数。
这是我在AsyncTask中的处理程序和doInBackground函数
protected Void doInBackground(Void... params) {
while(true){
handler.postDelayed(new Runnable() {
public void run() {
count++;
}
}, 10000);
}
}
当我执行此任务时,它等待10秒然后开始非常快地增加计数(接近每秒2k)。我想每10秒增加1次计数。
答案 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);
}