2012-11-21 25 views
0

this問題與我所問的基本相似,我試圖在每1秒運行一次可運行的服務上使用計時器,以使此可運行更新某些其他活動中的某些UI。用Handler類執行倒數計時器

這個活動可以在後臺或者已經死了,但是服務不能停止倒計時,因爲添加問題中的人說,我有時候會在所有可運行的程序中同時運行,當我喚醒手機時。

他得到的答案是使用AlarmManager,但Android文檔不鼓勵AlarmManager用於超時和滴答,並建議使用處理程序,因此任何人都得到了如何正確使用處理程序的例子嗎?

注意的問題開始當手機進入睡眠狀態,只有一段時間後accure,定時器的工作對於像30分鐘,但幾個小時它不...

+0

CountDownTimer只是一個具有一些額外功能的Handler,所以「用Handler類實現一個倒數計時器」將有一個Handler調用一個Handler ...我建議跳過CDT。無論如何,您是否需要在屏幕關閉時運行_every_ tick,或者只有在屏幕重新開啓時計時器纔會更新? – Sam

+0

好吧,當我想到它時,你的第二個想法是非常有吸引力的,不好想到它!,但第一個是我目前想要的... –

回答

1

一些概念...

睡眠模式

Android的內核會進入休眠模式(默認),如果沒有用戶交互或請求。這樣做是爲了儘量減少電池使用率,並意味着任何代碼都將停止運行。

報警管理

這是可以設置蒂莫事件喚醒內核並開始運行代碼的API。如果應用程序需要執行一些長時間的活動,它應該請求喚醒,否則內核將在短時間內再次進入睡眠模式。

請告訴我你的申請

你的服務去上,一旦設備進入睡眠停止。當設備被用戶喚醒或某個其他應用程序在您的手機中發出的某個鬧鐘管理器請求時,您的服務將再次啓動。當手機再次進入睡眠狀態時,您的服務也會如此。

你應該做的

首先,你應該仔細想一想,如果你真的需要有更新會在未使用一段時間(在手機上時,它應該進入睡眠模式)。也許沒有人使用它,並且使服務持續運行,將會保持蓄電池的暢通。

如果您不需要的服務不間斷的運行,你有兩個選擇:

使用報警管理

喚醒在固定間隔時間的設備(使用頻率較少可能),更新你的服務工作。如果這需要一些時間,請申請WAKE_LOCK並在完成後發佈。

使用最後

如果你能等待手機用戶被喚醒來更新你的服務工作,甚至更好。只刪除所有更新請求,但最後一個除外。

最後

如果你真的需要服務不間斷的運行,要求WAKE_LOCK服務啓動時。不要忘記,你會在電池現場支付。

Note:如果您使用Timer,Handler或其他任何東西,則無論如何,上述內容將始終適用。

問候。