我的要求是每10秒重复调用一次异步任务,以便web服务获取数据并相应地更新(更新地图和图像)。
我一直在搜索,发现可以使用任务计算器。我面临的问题是参数被传递到我的asynctask。但是我无法将该参数传递给任务时间。
我发现为此应创建一个扩展计时器任务的单独类。但我不知道如何根据我的需要完成这项工作。
请善待我。下面给出了将参数传递给异步任务的代码。
new AsyncLoadGpsDetails().execute(userName);
我想重复执行异步任务。 PLease帮助我,我不知道如何创建扩展tasktimer的类,因为我是新手。
谢谢&提前问候
答案 0 :(得分:0)
以下是Timer和TimerTask的示例:
private Timer mTimer;
private TimerTask mTimerTask;
private void launchTimerTask() {
mTimer = new Timer();
mTimerTask = new TimerTask() {
@Override
public void run() {
// Perform your recurring method calls in here.
new AsyncLoadGpsDetails().execute(userName);
}
};
mTimer.schedule(mTimerTask, // Task to be executed multiple times
0, // How long to delay in Milliseconds
10000); // How long between iterations in Milliseconds
}
private void finishTimerTask() {
if (mTimerTask != null) {
mTimerTask.cancel();
}
if (mTimer != null) {
mTimer.purge();
mTimer.cancel();
}
}
对于TimerTask,您需要以下导入:
import java.util.Timer;
import java.util.TimerTask;
如果可能,我会使用ScheduledExecutor(Java Timer vs ExecutorService?)。有很多例子,但这里有一个快速片段:
private ScheduledExecutorService mService;
private ScheduledFuture mFuture;
private void launchScheduledExecutor() {
mService = Executors.newSingleThreadScheduledExecutor();
mFuture = mService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// Perform your recurring method calls in here.
new AsyncLoadGpsDetails().execute(userName);
}
},
0, // How long to delay the start
10, // How long between executions
TimeUnit.SECONDS); // The time unit used
}
private void finishScheduledExecutor() {
if (mFuture != null) {
mFuture.cancel(true);
}
if (mService != null) {
mService.shutdown();
}
}
确保在完成后关闭ExecutorService。
对于上面的代码段,您需要以下导入:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
您可以随时随地致电launch
(或许onClickListener
或onCreate
)。请确保在某个时刻调用“完成”,否则它们将无限期地运行(例如在onDestroy
中)
答案 1 :(得分:0)
您可以使用scheduleAtFixedRate或scheduleWithFixedDelay ...
<强> scheduleAtFixedRate 强>
// this task for specified time it will run Repeat
repeatTask.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Here do something
// This task will run every 10 sec repeat
}
}, 0, 10);
<强> scheduleWithFixeDelay 强>
scheduler.scheduleWithFixedDelay(new TimerTask() {
@Override
public void run() {
// Here do something
// This task will run every 10 sec Delay
}
},, 0, 10, TimeUnit.SECONDS);
找出它们之间的区别Here