我应该在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();
@smsrecv:我已经结束了在'WakefulIntentService'以下模式:https://开头github上。 com/commonsguy/cwac-wakeful – CommonsWare 2011-05-23 00:12:21
使用引用计数的'WakeLock',您不需要执行'acquire(1000)'技巧。 – CommonsWare 2011-05-23 00:13:13