我有以下任務:使服務執行並從互聯網上每10分鐘獲取一次數據。我嘗試使用組合服務+計時器,但在這種情況下,我無法控制服務(我在延遲服務的onCreate()方法中執行TimerTask,並且當我中斷服務時TimerTask不會停止)。我只需要2個按鈕:「開始服務」和「停止服務」。這種情況下最好的方法是什麼?感謝您的幫助。如何爲計時器工作提供服務?
回答
如果我很瞭解你,你想知道如何停止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()。
感謝您的回覆。我嘗試更好地解釋:我執行Service,並在onCreate()方法的服務中執行timer(它是類的成員)timer.scheduleAtFixedRate(..)。然後服務執行onDestroy()方法的服務,但定時器仍然有效。這很好,我需要每隔5分鐘檢查一次互聯網服務。但是,如果我已經停止服務,我該如何停止計時器?或者我如何組織每5分鐘檢查一次網絡服務? – user1078760 2011-12-20 16:10:09
從你所說的話來說,Timertask應該在你終止服務之後生存下來....所以它不能成爲Service的成員。在一些你可以一直運行的類中保留TimerTask引用。如果你沒有一直在運行的類,那麼創建一個......你應該爲此啓動一個新的線程......如果你發佈了一些演示代碼,就會更容易糾正你的問題,重新做錯了。 – Renato 2011-12-20 16:26:25
您應該使用AlarmManager。看到這個問題Android: How to use AlarmManager尋求幫助。沒有必要浪費用戶的記憶,保持你的服務10分鐘無所事事。另外,如果手機處於睡眠狀態,您的計時器將不會運行。通過使用AlarmManager,手機會每隔10分鐘自動喚醒一次,並且可以調用您的服務來執行其網絡下載任務。
- 1. laravel 5服務提供商不工作我的Web服務器
- 2. 如何從Web服務器提供JSON?
- 3. spark如何實時提供Web服務?
- 4. WSO2雲身份服務器作爲IDP和Salesforce作爲服務提供商
- 5. 如何成爲SAML服務提供商
- 6. WSO2作爲服務提供商
- 7. 作爲SAML服務提供商的ADFS
- 8. Azure作爲SAML 2.0服務提供商
- 9. Java服務提供API應該如何工作?
- 10. 計時器如何在.net Windows服務中工作?
- 11. SAML服務提供者作爲另一項服務的身份提供者?
- 12. PHP內置服務器提供「CLI已停止工作」
- 13. 如何從我的IIS 7服務器提供顛覆服務?
- 14. 如何阻止我的apache2服務器提供missile_launch_codes.ini服務?
- 15. 爲什麼計時器不能在windows服務中工作?
- 16. Mac .app文件在由網絡服務器提供服務後不再工作
- 17. 如何爲HTTP服務器提供.jasper文件?
- 18. 如何爲請求的促銷郵件提供smtp服務器?
- 19. 如何配置Munin爲我提供所有云服務器?
- 20. 如何爲查找服務器文件夾提供解析?
- 21. 作業提交在星火作業服務器提供的NullPointerException
- 22. 使用Express框架爲服務器圖像提供服務
- 23. 作爲消費者和提供商的IS4 webapi服務器
- 24. 身份服務器4作爲Azure應用服務的身份提供商
- 25. 當服務器提供https時,如何將鏈接轉換爲https?
- 26. 服務提供商如何在IdP服務器上強化密碼提示?
- 27. 角Js:工廠,服務和提供商。何時使用哪個?
- 28. 如何在提供下載對話框時將頁面作爲html提供服務
- 29. 1作家服務器1搜索服務器實時工作
- 30. Android服務+倒計時=不工作
您需要使用AlarmManager。看到這個問題http://stackoverflow.com/questions/1082437/android-alarmmanager – 2011-12-20 16:04:28
謝謝。但爲什麼我不能使用Timer呢? – user1078760 2011-12-20 16:31:59
沒有必要浪費用戶的記憶,保持你的服務10分鐘無所事事。另外,如果手機處於睡眠狀態,您的計時器將不會運行。通過使用AlarmManager,手機將每10分鐘自動喚醒一次,並且您的服務可以被稱爲執行其網絡下載任務。 – 2011-12-20 16:36:20