本文主要介绍使用WakeLock在后台保持安卓应用唤醒的知识。具有很好的参考价值。下面就让我们跟随边肖一起来看看吧。
在使用微信、QQ等一些产品时,如果有新消息来了,即使锁屏,手机屏幕也会亮起并提示声音,这时用户就知道有新消息来了。不过一般来说,手机锁屏后,安卓系统为了省电,减少CPU消耗,会在一段时间后让系统进入休眠状态。此时,Android系统中的CPU会保持在相对较低的功耗状态。鉴于前面的例子,接收到新消息时一定有网络请求,网络请求是一个消耗CPU的操作。那么,如何保持系统的网络状态,甚至在系统进入睡眠状态后,通过程序唤醒手机呢?答案是Android中的WakeLock机制。
首先看看官方的解释:
这个类让你控制设备的电源状态。
PowerManager。唤醒锁:让你说你需要打开设备。
PowerManager负责管理Android设备的电源,系统则通过各种锁控制电源。WakeLock是一种锁定机制,只要有人守着这个地方,系统就无法进入睡眠阶段。由于必须保持应用程序在后台运行,因此自然要获得这个锁,以确保应用程序始终在后台运行。之前我提出了一个要求,要求在后台运行一个服务来执行轮询,但是发现过了一会儿轮询就中断了(我的测试是要求二十分钟后停止),但是再次解锁屏幕后,轮询请求又开始了。后来我在Stackoverflow上找到了WakeLock的用法,试了一下,效果还挺好的。在用这个方法之前,我把服务设置为前台,其他方法都不管用。不知道有没有更好的方法让你达到这个要求。请留言和我讨论!
接下来,我们来看看如何使用唤醒锁:
WakeLock wakeLock=null
//获取电源锁,在屏幕熄灭时仍然获取CPU的情况下保持服务运行。
私有void acquireWakeLock()
{
if (null==wakeLock)
{
power manager pm=(power manager)this . getsystemservice(上下文。POWER _ SERVICE);
wake lock=pm . new wake lock(power manager。PARTIAL_WAKE_LOCK|PowerManager。ON_AFTER_RELEASE,' PostLocationService ');
if (null!=唤醒锁)
{
wake lock . acquire();
}
}
}
//释放设备电源锁
私有void releaseWakeLock()
{
if (null!=唤醒锁)
{
wake lock . release();
wakeLock=null
}
}
上面的第一种方法是获取锁,第二种方法是释放锁。一旦获取了锁,在屏幕熄灭或长时间锁定后,系统后台可以一直保持获取锁的应用程序运行。获取PowerManager的实例pm,然后通过newWakeLock方法获取wakelock的实例,其中第一个参数是指定获取哪种类型的锁。不同的锁对系统CPU、屏幕、键盘的影响不同,第二个参数是自定义名称。
各种锁的类型对CPU 、屏幕、键盘的影响:
PARTIAL_WAKE_LOCK:保持CPU运行,屏幕和键盘灯可能会关闭。
SCREEN_DIM_WAKE_LOCK:保持CPU运行。允许保持屏幕显示,但可能是灰色的。允许关闭键盘灯。
SCREEN_BRIGHT_WAKE_LOCK:保持CPU运行,保持屏幕高亮,关闭键盘灯。
FULL_WAKE_LOCK:保持CPU运行,保持屏幕高亮,保持键盘灯亮。
ACQUIRE_CAUSES_WAKEUP:强制屏幕点亮。这个锁主要是针对一些必须通知用户的操作。
ON_AFTER_RELEASE:解锁时,保持屏幕开一会儿。
最后别忘了声明权限:
uses-permission Android:name=' Android . permission . wake _ LOCK '/
uses-permission Android:name=' Android . permission . device _ POWER '/
以上总结了一种提出需求的方法。有更好方法的朋友希望在留言处提出来,一起讨论改进。谢谢大家!
要求:要在后台运行一个服务来执行轮询,在屏幕关闭或锁定后,仍然需要将服务保持在轮询状态。
这就是本文的全部内容。希望这篇文章的内容能给你的学习或者工作带来一些帮助,同时也希望你能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。