我目前正在尝试在我的Android应用程序中设置WiFi扫描,每30秒扫描一次WiFi接入点。
我使用了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();
}
}
计时器和任务启动得很好,每30秒扫描一次,但我无法停止它,我可以停止计时器,但任务仍然发生,scanTask.cancel()也似乎没用。
有更好的方法吗?还是我在计时器/计时器任务类中漏掉了什么?
scanTask
被重置为null
,从你展示的代码片段中无法确定为什么或如何。在Service
中使用postDelayed()
不是一个可选项,但在这种情况下为什么你想/需要一个Service
还不清楚。 - CommonsWare