我目前正在嘗試在我的Android應用程序中設置WiFi掃描,每30秒掃描一次WiFi接入點。Android - 使用Timer和TimerTask控制任務?
我已經使用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。取消()似乎也不工作。
有沒有更好的方法來做到這一點?或者我在Timer/TimerTask類中丟失了什麼?
我試着查布爾在scanTask這樣 布爾tf = scanTask.cancel(); 但我現在得到一個空指針異常在該行。 但是,任務本身運行良好? 我最終會運行一個服務中的代碼,所以會使用postDelayed是一個選項? – 2010-01-29 14:59:38
顯然,'scanTask'正在被重置爲'null',並且從您提供的代碼片斷中無法說出原因或nhow。 'postDelayed()'不是'Service'中的一個選項,但是在這種情況下爲什麼你需要/需要'Service'還不清楚。 – CommonsWare 2010-01-29 15:10:14
scanTask沒有在整個應用程序的代碼中的其他地方使用,也不是Timer,我發佈的是Timer t和TimerTask scanTask的全部用法。我想創建一個應用程序,使用最少或沒有用戶界面,所以從閱讀有關Android的服務是這樣做的方式? – 2010-01-29 15:49:34