在后台增加 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);
}
我正在尝试定期增加后台计数。
这是我在 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);
}