关于电源锁:android之WakeLock机制浅析

使用WakeLock使Android应用程序保持后台唤醒 在使用一些产品列如微信、QQ之类的,如果有新消息来时,手机屏幕即使在屏状态下也会亮起并提示声音,这时用户就知道有新消息来临了。但是,一般情况下手机屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态。针对前面的例子,收到新消息必定有网络请求,而网络请求是消耗CPU的操作,那么如何在屏状态乃至系统进 阅读详情

http://blog.sina.com.cn/s/blog_4ad7c2540101n2k2.html

项目中数据传输时因为手机休眠而罢工了,这里简单了解了一下电源锁。

android之WakeLock机制浅析

(

应用程序耗电的实质,是所启用的硬件在消耗电量。  
手机的耗电单元 
CPU: 应用处理器(Application Processor)和基带处理器(Base Band) 

Soc(系统级芯片): GPU(图形处理单元), 

Video Codec等 外设:wifi,BT, GPS,LCD等  
耗电情况: 
应用处理器(Application Processor) 40~60mA

GPU开启时会大于100mA 

基带处理器(Base Band)3~5mA  

通话时100~200mA 

LCD  100mA 

Wifi   100mA 
BT    60mA  

AP是ARM架构的处理器,用于运行Linux+Android系统;

BP用于运行实时操作系统(RTOS),通讯协议栈运 行于BP的RTOS之上

非通话时间,BP的能耗基本上在5mA左右,而AP只要处于非休眠状态,能耗至少在50mA以上,执行图形运算时会更高。另外 LCD工作时功耗在100mA左右,WIFI也在100mA左右。

一般手机待机时,AP、LCD、WIFI均进入休眠状态,这时Android中应用程序的代码也会停止执行,只会有基带处理器(Base Band)的耗电。 
 
摩托罗拉的里程碑手机为例,官方的参数如下:

 锂电池(1400mAh)  通话时间450分钟   待机时间420小时 
 
也就是说,通话时1400/(450/60) 186.67mA 

          待机时 1400/420 3.33mA  
省电的原则:按需并按最低标准使用硬件  


WakeLock机制:

Android为了确保应用程序中关键代码的正确执行,提供了Wake Lock的API,使得应用程序有权限通过代码阻止AP进入休眠状态。 
WakeLock阻止应用处理器(Application Processor)挂起,确保关键代码的运行,通过中断唤起应用处理器(Application Processor),可以阻止屏幕变暗。所有的WakeLock被释放后,系统会挂起。  
PowerManager pm (PowerManager) context.getSystemService(Context.POWER_SERVICE); WakeLock sCpuWakeLock pm.newWakeLock( 
                PowerManager.FULL_WAKE_LOCK 
                PowerManager.ACQUIRE_CAUSES_WAKEUP,"okTag"); 

 if (sCpuWakeLock!= null)          

 sCpuWakeLock.release(); 

          sCpuWakeLock null; 

}


PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。 
SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯 
SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,允许关闭键盘灯 
FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度 
ACQUIRE_CAUSES_WAKEUP:不会唤醒设备,强制屏幕马上高亮显示,键盘灯开启。有一个例外,如果有notification弹出的话,会唤醒设备。 
ON_AFTER_RELEASE:WakeLock 被释放后,维持屏幕亮度一小段时间,减少WakeLock 循环时的闪烁情况
如果申请了partial wakelock,那么即使按Power键,系统也不会进Sleep,如Music播放时 如果申请了其它的wakelocks,按Power键,系统还是会进Sleep

但如果不领会Android设计者的意图而滥用Wake Lock API,为了自身程序在后台的正常工作而长时间阻止AP进入休眠状态,就会成为待机电池杀手。 

 

Alarm Manager 
AlarmManage有一个AlarmManagerService,该服务程序主要维护app注册下来的各类Alarm,并且一直监听Alarm设备,一旦有Alarm触发,或者是Alarm事件发生,AlarmManagerService就会遍历Alarm列表,找到相应的注册Alarm并发出广播

Alarm Manager会维持一个cpu的wake lock。这样能保证电话休眠时,也能处理alarm的广播。一旦alarm receiver的onReceive() 方法执行完,wake lock会迅速被释放。如果在receiver中开启一个service,有可能service还没启动,wake lock已经被释放了。所以此时要实现单独的wake lock策略。

有4种Alarm类型: 
1)RTC_WAKEUP 
在指定的时刻(设置Alarm的时候),唤醒设备来触发Intent。

2)RTC 
在一个显式的时间触发Intent,但不唤醒设备。   
3)ELAPSED_REALTIME 
从设备启动后,如果流逝的时间达到总时间,那么触发Intent,但不唤醒设备。流逝的时间包括设备睡眠的任何时间。注意一点的是,时间流逝的计算点是自从它最后一次启动算起。   
4)ELAPSED_REALTIME_WAKEUP 
从设备启动后,达到流逝的总时间后,如果需要将唤醒设备并触发Intent。 

 

Android_WakeLock使用 1.前言与WakeLock简介 1.1.前言 一些手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在屏状态下也会亮起,并提示用户有新消息。但是,一般情况下手机屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态,而收到新消息必定有网络请求,而网络请求是消耗CPU的操作,那么如何在屏状态乃至... 阅读详情

相关推荐

Android电源管理】深入解析PowerManagerService的WakeLock机制与实战应用

本文深入解析Android电源管理中的PowerManagerService WakeLock机制,详细介绍其工作原理、六大类型及实战应用技巧。通过音乐播放、健身追踪等典型场景,展示如何正确使用WakeLock优化电量消耗,并提供常见问题排查与性能优化建议,帮助开发者实现高效电源管理。

weixin_29200741的博客 416

Partial Wake Locks

和你一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、发现问题Partial wake...

程序员Android 2233

Android 编程中的 Wake Lock 使用详解及示例代码

在使用 Wake Lock 时,需要根据具体需求选择合适的 Wake Lock 类型,并在任务完成后及时释放 Wake Lock,以便设备可以进入休眠状态,节省电量。在上述示例中,我们在 MusicPlayerService 的 onCreate() 方法中获取了一个 PARTIAL_WAKE_LOCK 的 Wake Lock,并在 onDestroy() 方法中释放了该 Wake Lock。在获得 Wake Lock 后,可以执行需要持续运行的任务,直到任务完成或不再需要设备处于唤醒状态。

CyberBladeX的博客 1720

androidWakeLock机制浅析

应用程序耗电的实质,是所启用的硬件在消耗电量。   手机的耗电单元  CPU: 应用处理器(Application Processor)和基带处理器(Base Band)  Soc(系统级芯片): GPU(图形处理单元),  Video Codec等 外设:wifi,BT, GPS,LCD等   耗电情况:  应用处理器(Application Processor) 4

HarryWeasley的专栏 1725

android wakelock申请与释放

wakelock可以被内核空间 申请和释放。如果申请的是非超时wake_lock,需要相应的调用wake_unlock来释放,而超时则不需要手工释放(当然你也可以手工释放),超时后kernel系统会自动释放,在内核空间可以直接调用wake_lock, wake_lock_timeout 申请 Android kernel为用户空间提供了申请和释放wakelock的接口,实现在kernel/

Focus on the Linux kernel 1万+

PowerManagerService分析之PARTIAL_WAKE_LOCK

为什么申请了PARTIAL_WAKE_LOCK系统不会进str? 1 . acquireWakeLockInternal 把 wakelock加到mWakeLocks中; 2. updatePowerStateLocked -> updateWakeLockSummaryLocked -> getWakeLockSummaryFlags 把PowerManager.PARTIAL...

yunyun_9027的博客 3721

Android应用层及Framework层的角度分析WakeLock机制

    从Android实战角度来分析分析WakeLock机制 前言   好久没有写点实战类型的博客了,最近一直都在捣鼓源码分析和项目相关事情,是时候来点实战类型的博客了。捯饬点啥实战的呢,正好前两天有一个同事询问我关于AndroidWakeLock相关的问题,这里我们就从实战的角度出发来对AndroidWakeLock机制分析一番。 注意:本篇的介绍是基于Android 7.xx平台为基础的,其中涉及的代码路径如下: frameworks/base/core/java/android/os/P

IT先森 3796

android wakelock机制,Android屏状况下保持背景唤醒WakeLock机制

少许手机app(如微信、QQ等)有新消息来到达,手机屏幕即使在屏状况下也会亮起,并提示用户有新消息。不过,普通环境动手机屏后,Android系统为了省电以及削减CPU花消,在一段光阴后会使系统进入休眠状况,这时,Android系统中CPU会保持在一个相对较低的功耗状况,而收到新消息必定有网页要求,而网页要求是花消CPU的操纵,辣么若何在屏状况甚至系统进入休眠后,仍旧保持系统的网页状况以及通过...

weixin_30556403的博客 1316

Android WakeLock简介

WakeLock简介 WakeLock是一种表示应用程序需要让设备继续运行的机制,下载文件或者听音乐等等,设备在灭屏状态下,还需要继续运行,如果设备进入休眠,听音乐突然停止了,不符合使用场景。Android设备通过WakeLock机制来管理系统否需要真正的进入休眠,应用程序根据不同的使用场景,申请对应的,应用程序获得了WakeLock,系统就待机不下去。 example // 申请权限 android.permission.WAKE_LOCK PowerManager pm = (PowerManag

he980725866的博客 5923

Android 唤醒屏幕的方式:屏幕 - WakeLock / FLAG_KEEP_SCREEN_ON

Android 唤醒屏幕的方式:屏幕 - WakeLock / FLAG_KEEP_SCREEN_ON

weixin_42602900的博客 3849

wakelock

Wake lock - wakelockandroid电源管理系统中扮演一个核心的角色,wakelock是一种机制, 只要有task拿着这个, 系统就无法进入休眠, 可以被用户态进程和内核线程获得。这个可以是有超时的或者是没有超时的, 超时的会在时间过去以后自动解。如果没有了或者超时了, 内核就会启动标准linux的那套休眠机制机制来进入休眠。   wakelock在andr

1万+

Android Framework 电源子系统(02)系统休眠 wakelock机制

系列文章解读&说明: Android Framework 电源子系统 的分析主要分为以下部分: Android Framework 电源子系统(01)PowerManagerService启动分析 Android Framework 电源子系统(02)系统休眠wakelock机制 Android Framework 电源子系统(03)核心方法updatePowerStateLoc...

wangdsh的博客 2467

Android wakelock 种类

PARTIAL_WAKE_LOCK: 保持CPU 运转,屏幕和键盘灯有可能是关闭的。 SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯 SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯 FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度 ACQUI...

wolfking0608的博客 2046

性能优化十六之Wake_Lock唤醒以及JobScheduler使用

前言      上一篇博客记录了电量优化中的第一种优化,把一些不需要及时和用户交互的一些操作,放到当用户插上电源的时候。根据自己目前的知识了解,只知道三种优化方式,第二种和第三种方式接下来进行介绍。第二种方式:网络类型选择优化      目前大部分手机都支持4G网络,殊不知蜂窝移动信号是在所有的网络类型中是最消耗电量的,很多人在使用手机的过程中,发现如果一直在使用4G移动网络,电量会持续不了多久就没

Kiven 每天都需要有所获,每天都需要进步......... 1万+

应用程序结束时是否会释放wakelock

http://stackoverflow.com/questions/4697873/does-the-android-os-release-a-wakelock-if-the-app-or-service-holding-it-is-kille 10 I have question about wakelock. In cases shown below, does androi

oman111的专栏 1315

android 服务wake_lock,android – 当持有它的Activity / Service终止或完成时,wake_locks会自动释放吗?...

我知道最好在不再需要时立即释放wake_lock,但是如果已经获得它的Activity或Service在释放之前完成或停止会发生什么?它是由系统自动释放的吗?我认为系统应该在这种情况下自动释放它们,但我在API文档中找不到任何内容.编辑:添加更多信息查看PowerManager.WakeLock文档,我已经看到wake_locks默认是引用计数(读取setReferenceCounted her...

weixin_26717737的博客 268

Android WakeLock的使用

// PowerManager的一般用法,请求和释放唤醒    PowerManager powerMgr = (PowerManager)  getSystemService(Context.POWER_SERVICE);    int flags = PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WA

daiqiquan的专栏 1446

android2.3 -添加自定义按键:作唤醒功能 .

最近需要做个唤醒功能,当按键的时候android系统唤醒并点亮屏,在长按键中,系统不能在进入睡眠。 [cpp] view plaincopyprint? 驱动方面: 1:在平台设备文件中添加一个按键,定义为唤醒源! \arch\arm\mach-s5pv210 staticstructgpio_keys_buttongpio_butto...

a804666的博客 321
上一篇: Android正确进行数据存储
下一篇: Android开发常用网站汇总
cocos2dx3
博客等级 码龄15年 15粉丝 52原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值