我目前正在尝试在我的Android应用程序中设置WiFi扫描,每隔30秒扫描一次WiFi接入点.
我已经使用Timer和TimerTask以我需要的间隔正确运行扫描.
但是我希望能够在用户按下按钮时停止并开始扫描,我当前无法停止然后重新启动Timer和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();
}
}
Run Code Online (Sandbox Code Playgroud)
所以Timer和Task启动正常并且扫描每30秒发生一次但是我不能让它停止,我可以停止Timer但是任务仍然发生并且scanTask.cancel()似乎也不起作用.
有一个更好的方法吗?或者我在Timer/TimerTask类中遗漏了什么?
从Stack Overflow上阅读我发现很多人不建议使用Timer Task.嗯......但我已经实现了这个:
我有这个代码:
detectionHandlerTimer.schedule(myTimerTask, 60 * 1000, 60 * 1000);
Run Code Online (Sandbox Code Playgroud)
问题是myTimerTask的工作持续一段时间.
我想这样的行为:
但上面的代码表现得像这样
由于任务的持续时间大于60,因此计时器在任务完成后立即启动任务.但我希望它再次等待.