用Timer和TimerTask控制任务?
我目前正试图在我的Android应用程序中设置WiFi扫描,每隔30秒扫描一次WiFi接入点。
我使用了Timer和TimerTask来按照我需要的时间间隔正确地运行扫描。
但是,我希望能够停止并开始扫描,当用户按下一个按钮,我目前无法停止,然后重新启动计时器和TimerTask。
这是我的代码
TimerTask scanTask;
final Handler handler = new Handler();
Timer t = new Timer();
public void doWifiScan(){
scanTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
wifiManager.scan(context);
Log.d("TIMER", "Timer set off");
}
});
}};
t.schedule(scanTask, 300, 30000);
}
public void stopScan(){
if(scanTask!=null){
Log.d("TIMER", "timer canceled");
scanTask.cancel();
}
}
所以计时器和任务开始正常,扫描每30秒发生一次,但我无法让它停止,我可以停止计时器,但任务仍然发生,scanTask.cancel()似乎也不工作。
有一个更好的方法吗? 或者我在Timer / TimerTask类中丢失了什么?
你可以考虑:
cancel()
的布尔结果,因为它应该指示您的请求是成功还是失败 purge()
或cancel()
Timer
而不是TimerTask
如果你不一定需要Timer
和TimerTask
,你总是可以使用postDelayed()
(在处理器和任何View
上都可用)。 这将计划一个Runnable
在延迟后在UI线程上执行。 为了让它重现,只需在完成您的周期性工作之后再次安排自己。 然后,您可以监视布尔标志来指示此过程何时结束。 例如:
private Runnable onEverySecond=new Runnable() {
public void run() {
// do real work here
if (!isPaused) {
someLikelyWidget.postDelayed(onEverySecond, 1000);
}
}
};
使用你的代码,而不是
scanTask.cancel();
正确的方法是取消你的计时器(不timerTask):
t.cancel();
Android文档说明cancel()取消计时器和所有计划任务。 如果当前正在运行的任务不受影响。 此定时器上不能再安排更多任务。 随后的通话什么都不做。 这解释了这个问题。
链接地址: http://www.djcxy.com/p/74901.html上一篇: Controlling a task with Timer and TimerTask?
下一篇: How to stop the task scheduled in Java.util.Timer class