我应该在IntentService中使用WakeLock吗?

5
假设我使用BroadcastReceiver接收事件(意图),即使手机处于深度睡眠模式(例如套接字上的传入数据包或传入的短信),它也会被唤醒。然后,我将接收到的数据转发到IntentService进行处理。我应该使用WakeLock吗?
如果我不使用WakeLock,我可以确定设备不会进入睡眠模式,直到我的服务的意图队列为空(因此服务已停止)吗? (假设处理可能需要很长时间。)
如果需要WakeLock,则何时何地应创建和获取它,并在何时释放它?我想在服务的意图队列为空后立即释放WakeLock。
提前感谢您。
1个回答

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
使用引用计数的 WakeLock,您无需执行 acquire(1000) 技巧。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接