初学者提问:Wakelocks

Man*_*hot 7 android wakelock

我是WakeLock概念的新手,需要你的帮助.

问题:

  1. 我假设WakeLock是某种类型的锁,当执行代码保持时,它会阻止设备休眠.如果设备已处于睡眠/待机模式,那么代码会执行吗?假设它永远不会获得WakeLock?

  2. 当在后台线程(AsyncTask)中完成一个长时间运行的任务(abt 7-8秒)时,我是否应该为持有WakeLock而烦恼?AsyncTask是否已经为我获取了它?

  3. 我们赞赏官方文件的链接和唤醒锁上的文章.

谢谢.

Ste*_*teD 4

1.如果手机处于完全睡眠模式,除了来电之外,您可以使用 AlarmManager Intent 来唤醒手机。

来自AlarmManager类文档:

只要警报接收器的 onReceive() 方法正在执行,警报管理器就会持有CPU 唤醒锁。这保证了在您处理完广播之前手机不会休眠。一旦 onReceive() 返回,警报管理器就会释放此唤醒锁。这意味着在某些情况下,一旦 onReceive() 方法完成,手机就会进入睡眠状态。如果您的警报接收器调用 Context.startService(),则手机可能会在启动请求的服务之前休眠。为了防止这种情况,您的广播接收器和服务将需要实施单独的唤醒锁定策略,以确保手机继续运行,直到服务可用。

2.如果您正在使用AsyncTask,您将需要将结果发布到 UI 线程上onPostExecute()

来自AsyncTask文档:

AsyncTask 可以正确且轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。

3.我建议您阅读Power Manager的官方文档,其中对WakeLock概念进行了很好的介绍。