前言:

一些手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在锁屏状态下也会亮起,并提示用户有新消息。但是,一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态,而收到新消息必定有网络请求,而网络请求是消耗CPU的操作,那么如何在锁屏状态乃至系统进入休眠后,仍然保持系统的网络状态以及通过程序唤醒手机呢?答案就是Android中的WakeLock机制。

解决方法:

首先看看官方的解释:

PowerManager:This class gives you control of the power state of the device.

PowerManager.WakeLock: lets you say that you need to have the device on.

PowerManager负责对Android设备电源相关进行管理,而系统通过各种锁对电源进行控制,WakeLock是一种锁机制,只要有人拿着这把所,系统就无法进入休眠阶段。既然要保持应用程序一直在后台运行,那自然要获得这把锁才可以保证程序始终在后台运行。实际Android应用开发时,可以打log看是否service被后台杀掉了。

接下来看如何使用WakeLock:

WakeLock wakeLock = null;//获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行private void acquireWakeLock(){if (null == wakeLock){PowerManager pm = (PowerManager)this.getSystemService(Context.POWER_SERVICE);wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "PostLocationService");if (null != wakeLock){wakeLock.acquire();}}}//释放设备电源锁private void releaseWakeLock(){if (null != wakeLock){wakeLock.release();wakeLock = null;}}

在Service初始化方法onCreate()中调用acquireWakeLock,在停止或者unbind中调用releaseWakeLock。

上面第一个方法是获取锁,第二个方法是释放锁,一旦获取锁后,及时屏幕在熄灭或锁屏长时间后,系统后台一直可以保持获取到锁的应用程序运行。获取到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"/>

使用WakeLock将Android应用程序保持后台唤醒相关推荐

  1. Android解决程序切换后台被干掉,恢复状态问题

    Android解决程序切换后台被干掉,恢复状态问题 参考文章: (1)Android解决程序切换后台被干掉,恢复状态问题 (2)https://www.cnblogs.com/caiwan/p/And ...

  2. android实现程序的后台运行

    改写返回键事件监听,使得back键功能类似home键,让Acitivty退至后台时不被系统销毁,代码如下: public boolean onKeyDown(int keyCode, KeyEvent ...

  3. 检查Android应用程序是否在后台运行

    本文翻译自:Checking if an Android application is running in the background 在后台,我的意思是用户当前看不到应用程序的任何活动? #1楼 ...

  4. android 后台执行js,android - 当应用程序在后台运行时,Android WebView消耗大量电能...

    我的Android应用程序中有一个WebView,并且此WebView运行的网站上带有相当多的Javascript.当我的应用程序在后台运行时,用户报告了高功耗,我希望这是由于此javascript. ...

  5. Android监听程序进入后台,或者恢复到前台

    基本思路正如9楼所述: 就是让app中所有的activity继承与一个公共的activity(例如:BaseActivity),然后在BaseActivity的onStop()中判断当前程序是否处于后 ...

  6. 如何在Android应用程序中实现后台服务?

    在Android应用程序中实现后台服务,可以通过继承Service类来实现.下面是一个简单的示例代码: 首先,在AndroidManifest.xml文件中注册服务: <manifest xml ...

  7. Android应用程序和其设计思想--转载----做记录

    转载一篇Android 的先关文章,无论什么时候看都觉得有收获 文章来源地址 http://www.open-open.com/lib/view/open1466070376316.html 以下是正 ...

  8. Android应用程序性能优化

    1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾.不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结.我一总结的都说到了很多优化注意事项,但是看过这些文章后大多数存在一个问题就是只 ...

  9. Android实现程序前后台切换效果

    本文演示如何在Android中实现程序前后台切换效果. 在介绍程序实现之前,我们先看下Android中Activities和Task的基础知识. 我们都知道,一个Activity 可以启动另一个Act ...

最新文章

  1. csgo 人数文件_学生机简单开一个CSGO的社区服务器
  2. Kaggle金牌得主的Python数据挖掘框架,机器学习基本流程都讲清楚了
  3. Windows服务编写综述
  4. 4/100. Maximum Depth of Binary Tree
  5. Asp.Net Core EndPoint 终结点路由工作原理解读
  6. linux 运行jar main,Maven打包生成jar包并在linux下启动main方法
  7. spark1.6 maven java_Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】...
  8. 一行 Python 代码能干什么?有意思!
  9. 毕业论文开题报告撰写指南-宾夕法尼亚州立大学研究生写作中心
  10. 图的表示(Adjacency List + Adjacency Matrix)
  11. 【思考】Docker到底解决了什么问题
  12. php照片管理源码,PHP图片管理 Coppermine Photo v1.5.22 多国语言版
  13. ES6 — ES11 新特性一篇通
  14. elasticsearch实现类似京东的商品搜索效果(elasticsearch动态聚合)
  15. oracle sysdate 月份,如何将oracle中的sysdate月份值转换为数字?
  16. 基于stm32f407的无线视屏传输项目
  17. 学习NLP的第9天——基于HanLP实现的拼音转换
  18. 去掉PPT英文字体下面的红线
  19. 时间同步——TSN(Time Sensitive Network-时间敏感网络)协议802.1AS介绍
  20. 《信号与系统》 实验一 信号的时域分析及Matlab实现

热门文章

  1. MFC关于Radio按钮分组与选择的操作
  2. linux+cp+吃内存怎么办,Linux吃掉了我的内存
  3. Php如何发出请求,PHP中如何发送HTTP请求?
  4. 下拉列表 php,php数组生成html下拉列表的方法
  5. 日志切割之Logrotate
  6. Nginx(九)-- Nginx实际使用配置
  7. jmeter名词解释之聚合报告
  8. [置顶]IA32 architecture 学习笔记 (一)
  9. 道家遁甲式(又名道家奇门)
  10. Nginx小功能合集