2011-12-20 36 views
0

我有以下任務:使服務執行並從互聯網上每10分鐘獲取一次數據。我嘗試使用組合服務+計時器,但在這種情況下,我無法控制服務(我在延遲服務的onCreate()方法中執行TimerTask,並且當我中斷服務時TimerTask不會停止)。我只需要2個按鈕:「開始服務」和「停止服務」。這種情況下最好的方法是什麼?感謝您的幫助。如何爲計時器工作提供服務?

+0

您需要使用AlarmManager。看到這個問題http://stackoverflow.com/questions/1082437/android-alarmmanager – 2011-12-20 16:04:28

+0

謝謝。但爲什麼我不能使用Timer呢? – user1078760 2011-12-20 16:31:59

+0

沒有必要浪費用戶的記憶,保持你的服務10分鐘無所事事。另外,如果手機處於睡眠狀態,您的計時器將不會運行。通過使用AlarmManager,手機將每10分鐘自動喚醒一次,並且您的服務可以被稱爲執行其網絡下載任務。 – 2011-12-20 16:36:20

回答

0

如果我很瞭解你,你想知道如何停止TimerTask,當你中斷你的服務?! 如果是這樣,請繼續閱讀,否則請更好地解釋。

要停止TimerTask再次執行(假設它已計劃重複運行),您必須調用cancel()方法。首選的方法是讓TimerTask在檢查一些可以在外部設置的布爾標誌後調用cancel()方法。

例如:

class MyTimerTask extends TimerTask() { 

    private boolean alive = true; 

    public void run() { 
     if (alive) { 
      // do something 
     } else { 
      cancel(); 
     } 
    } 

    public void stop() { 
     alive = false; 
    } 
} 

然後,這是很明顯,當你打斷你的服務,你只需要調用MyTimerTask.stop()。

+0

感謝您的回覆。我嘗試更好地解釋:我執行Service,並在onCreate()方法的服務中執行timer(它是類的成員)timer.scheduleAtFixedRate(..)。然後服務執行onDestroy()方法的服務,但定時器仍然有效。這很好,我需要每隔5分鐘檢查一次互聯網服務。但是,如果我已經停止服務,我該如何停止計時器?或者我如何組織每5分鐘檢查一次網絡服務? – user1078760 2011-12-20 16:10:09

+0

從你所說的話來說,Timertask應該在你終止服務之後生存下來....所以它不能成爲Service的成員。在一些你可以一直運行的類中保留TimerTask引用。如果你沒有一直在運行的類,那麼創建一個......你應該爲此啓動一個新的線程......如果你發佈了一些演示代碼,就會更容易糾正你的問題,重新做錯了。 – Renato 2011-12-20 16:26:25

1

您應該使用AlarmManager。看到這個問題Android: How to use AlarmManager尋求幫助。沒有必要浪費用戶的記憶,保持你的服務10分鐘無所事事。另外,如果手機處於睡眠狀態,您的計時器將不會運行。通過使用AlarmManager,手機會每隔10分鐘自動喚醒一次,並且可以調用您的服務來執行其網絡下載任務。

相關問題