2013-11-21 60 views
1

我使用Nexus 4 - Android 4.3 - api_18。Android AlarmManager - ELAPSED_REALTIME當睡眠時繼續重複

當我使用AlarmManager.ELAPSED_REALTIME安排PendingIntent時,當設備處於睡眠模式時,鬧鐘繼續呼叫我的BroadcastReceiver

文檔中說,當設備進入睡眠狀態時,BroadcastReceiver只調用一次,然後當設備被喚醒:

如果它熄滅,而該設備是睡着了,它不會被傳遞到 的下一次該設備醒來。

在我的情況下,當設備睡着時,BroadcastReceiver被反覆調用。

我的代碼

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, 
          SystemClock.elapsedRealtime(), 
          DELAI_PLANNIF_TICK, 
          pendingIntent); 
+0

你怎麼知道你的設備進入睡眠模式? –

+0

嗨,好問題,我只關閉設備上的按鈕屏幕。當屏幕關閉並且我收到時,我測試:pm.isScreenOn(),它是錯誤的。我想設備是在睡眠模式呢? –

+0

在休眠模式下,CPU處於低功耗狀態,因此不會執行代碼(可能會被鬧鐘喚醒),通常會在屏幕關閉幾秒後發生。 – Piovezan

回答

0

當你把你的屏幕關閉,Android是不是處於休眠模式。它正在那裏,這個過程可能需要幾秒鐘的時間。某些應用程序可能獲得WakeLock並在屏幕關閉時繼續其任務(例如播放音頻)。我的猜測是你的設備只是沒有進入睡眠模式,你的行爲和預期的一樣。如果您不使用PowerManager,那麼您不應該擔心阻止設備進入睡眠狀態。如果您的應用在用戶不與設備交互時需要停止執行,則最好處理事件的屏幕。

+0

嗨,我已經測試了兩個小時,並且我確認在終端進入睡眠狀態後(我已經驗證它處於睡眠模式),BroadcastReceiver將不斷被調用。否則,處理屏幕關閉事件是一個很好的替代想法。 –

相關問題