2011-05-22 70 views
5

假設我使用BroadcastReceiver接收即使處於深度睡眠模式(例如套接字上的傳入數據包或傳入文本消息)以喚醒手機的事件(意圖)。然後我將收到的數據轉發給IntentService進行處理。我應該使用WakeLock嗎?我應該在IntentService中使用WakeLock嗎?

如果我不使用喚醒鎖,我可以確定設備不會進入睡眠模式,直到我的服務的意圖隊列爲空(並因此服務停止)? (假設處理可能需要很長時間)。

如果需要WakeLock,那麼我應該在何時何地創建並獲取它,以及何時應該釋放它?我想在服務的意圖隊列爲空之後馬上釋放WakeLock。

預先感謝您

回答

2

該設備是不能保證保持清醒足夠長的時間通過隊列的意圖得到。如果這是你處理意圖及時很重要,最好的辦法是做你onHandleIntent是這樣的:

mWakeLock.acquire(); // mWakeLock should be set to be reference counted 

// (do work) 

mWakeLock.acquire(1000); // hopefully long enough to get to the next item 
mWakeLock.release(); 
+4

@smsrecv:我已經結束了在'WakefulIntentService'以下模式:https://開頭github上。 com/commonsguy/cwac-wakeful – CommonsWare 2011-05-23 00:12:21

+0

使用引用計數的'WakeLock',您不需要執行'acquire(1000)'技巧。 – CommonsWare 2011-05-23 00:13:13