首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >初学者问题: Wakelocks

初学者问题: Wakelocks
EN

Stack Overflow用户
提问于 2010-11-23 03:12:31
回答 2查看 5.1K关注 0票数 7

我对WakeLock这个概念很陌生,需要你的帮助。

问题:

  1. 我假设WakeLock是某种类型的锁,当被执行的代码持有时,它会阻止设备休眠。如果设备已经处于休眠/待机模式,那么代码会执行吗?假设它永远不会获得WakeLock?
  2. 当一个长时间运行的任务(abt 7-8秒)在后台线程(AsyncTask)中完成时,我是否应该为保持一个WakeLock而烦恼?AsyncTask已经帮我买了吗?
  3. 链接到官方文件和写作的唤醒是非常感谢的。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-23 04:08:13

1.如果手机处于完全睡眠状态,除了来电之外,还可以使用AlarmManager意图唤醒电话。

来自AlarmManager类文档:

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

2.如果使用的是AsyncTask,则需要将结果发布到onPostExecute()上的UI线程

来自AsyncTask文档:

AsyncTask使UI线程能够正确和容易地使用。这个类允许在UI线程上执行后台操作和发布结果,而不必操纵线程和/或处理程序。

3.我建议您阅读动力管理器的正式文档,其中很好地介绍了WakeLock的概念。

票数 4
EN

Stack Overflow用户

发布于 2010-11-23 04:15:49

  1. 通常,在手机休眠时运行的唯一代码是BroadcastReceiver。实际上,手机醒了一会儿,运行了BroadcastReceiver的代码,然后又睡着了。既然你不应该在BroadcastReceiver中运行长代码(用它来启动Service ),你基本上可以假设你的代码永远不会在手机休眠时运行。当然,如果你使用BroadcastReceiver启动Service,你通常应该获得一个WakeLock。
  2. 使用由用户启动的AsyncTask,您实际上不需要担心WakeLocks。手机在运行时不太可能睡着。我不确定他们是否得到了WakeLock,但是在运行标准AsyncTask时让我的手机进入睡眠状态似乎并不会中断它。
  3. 就像SteD说的,看看这个:http://developer.android.com/reference/android/os/PowerManager.html

基本上,您需要担心WakeLocks的唯一时间是,您希望您的任务被睡眠所打断(就像您设置了一个闹钟,短暂地唤醒了电话),或者如果您绝对不能让任务被中断。否则,只需确保您优雅地处理任何中断。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4252434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档