我对WakeLock这个概念很陌生,需要你的帮助。
问题:
谢谢。
发布于 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的概念。
发布于 2010-11-23 04:15:49
BroadcastReceiver。实际上,手机醒了一会儿,运行了BroadcastReceiver的代码,然后又睡着了。既然你不应该在BroadcastReceiver中运行长代码(用它来启动Service ),你基本上可以假设你的代码永远不会在手机休眠时运行。当然,如果你使用BroadcastReceiver启动Service,你通常应该获得一个WakeLock。AsyncTask,您实际上不需要担心WakeLocks。手机在运行时不太可能睡着。我不确定他们是否得到了WakeLock,但是在运行标准AsyncTask时让我的手机进入睡眠状态似乎并不会中断它。基本上,您需要担心WakeLocks的唯一时间是,您希望您的任务被睡眠所打断(就像您设置了一个闹钟,短暂地唤醒了电话),或者如果您绝对不能让任务被中断。否则,只需确保您优雅地处理任何中断。
https://stackoverflow.com/questions/4252434
复制相似问题