2010-03-20 67 views
2

所以我有一個非常簡單的android活動,當您點擊一個按鈕時啓動一個計時器。當屏幕變爲不活動時,計時器似乎暫停

Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
doStuff();
}
}, 15 * 60 * 1000);

所以這個工作相當好我,當我在測試,但事實證明,當屏幕處於非活動狀態也是如此計時器。我對此感到有點驚訝。我知道你需要創建一個服務來讓後臺運行任何東西,但是我並沒有意識到這是在手機由於缺乏活動而使屏幕失效時在前臺進行的活動所必需的。令我困惑的是,我認爲這個工作原本就是我期望的,只是在過去幾周左右,定時器才受到節電的影響。我可能錯了,但..

所以基本上我的問題是:我看到預期的行爲?我是否需要將所有定時器創建爲服務或以某種方式禁止節能?

感謝您的任何建議, 帕特里克

回答

3

我有點感到意外。

當屏幕熄滅時,CPU立即關閉。 Timer的用戶與它無關,因爲這是一件Java事物,而不是Android事物。

什麼混淆我的是我覺得這個 或擔任我只是在過去的幾個星期本來和 預期的那麼有 計時器一直受到手機 省電。

我非常懷疑這一點。

我看到了預期的行爲?

是的。

我需要創建所有的計時器作爲 服務或以某種方式禁止 省電?

如果你有一個活動,必須保持在屏幕和設備上,使用方法:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

然而,這應該是像視頻播放器。

如果您正在嘗試執行更多類似Windows計劃任務或Linux cron作業的任務,則需要使用AlarmManagerIntentService,或許使用WakefulIntentService

還有其他的可能性,但我不知道你想要建立什麼。

+0

它基本上只是一個鬧鐘。當15分鐘後,它會發出噪音。 感謝您的好解答。 – elchuppa 2010-03-20 20:30:42

+1

如果15分鐘後警報必須響起,您需要投資'AlarmManager'。屏幕保持技巧只有在你的活動正在運行時纔會起作用,用戶可以按BACK退出它,或者啓動另一個應用程序或其他東西。如果只關心計時器,如果活動已啓動並正在運行,則可以使用「FLAG_KEEP_SCREEN_ON」方法。 – CommonsWare 2010-03-20 20:34:11

相關問題