我应该在IntentService中使用WakeLock吗?

问题描述:

假设我使用BroadcastReceiver接收即使处于深度睡眠模式(例如套接字上的传入数据包或传入文本消息)以唤醒手机的事件(意图)。然后我将收到的数据转发给IntentService进行处理。我应该使用WakeLock吗?我应该在IntentService中使用WakeLock吗?

如果我不使用唤醒锁,我可以确定设备不会进入睡眠模式,直到我的服务的意图队列为空(并因此服务停止)? (假设处理可能需要很长时间)。

如果需要WakeLock,那么我应该在何时何地创建并获取它,以及何时应该释放它?我想在服务的意图队列为空之后马上释放WakeLock。

预先感谢您

该设备是不能保证保持清醒足够长的时间通过队列的意图得到。如果这是你处理意图及时很重要,最好的办法是做你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