版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、AndroidAndroid电源管理框架电源管理框架1.Android系统电源管理框架简介2.Android系统电源状态之间转换过程3.Android核心服务之PoweManagerServiceAndroidAndroid电源框架的简介电源框架的简介电源管理(Power Management)在任何设备中都是最重要的组成部分之一,良好的电源管理方案可以达到节能、延长电池寿命、降低辐射、降温、延长设备使用寿命等目的。电源管理是实现低功耗的一种方式,处理器通常都会多种低功耗的状态,当系统空闲的时候可以根据需要让处理器进入低功耗状态,低功耗是个系统问题,单凭处理器不足以实现整个系统的低功耗,因此需
2、要与外设配合来实现,在硬件提供的低功耗机制基础上,需要软件系统(操作系统,驱动程序,上层应用)一起来发挥硬件低功耗的潜能,最终实现整个系统的低功耗1.1 Android电源管理概述AndroidAndroid电源框架的简介电源框架的简介1.2 电源管理框架的结构组织Android的电源管理主要是通过锁和定时器来切换系统的状态,使系统的功耗降至最低,整个系统的电源管理架结构分为四大部分:应用层,框架层,HAL层和Kernel层。AndroidAndroid电源框架的简介电源框架的简介AndroidAndroid电源框架的简介电源框架的简介 应用层:应用层:这里所谓的应用层主要是指应用程序和其他这
3、里所谓的应用层主要是指应用程序和其他使用电源管理的使用电源管理的Service,包括但不限于以下,包括但不限于以下Services: 框架层:框架层:在在AndroidAndroid框架层包含了对应用层接口的框架层包含了对应用层接口的APIAPI调用调用以及电源的协调工作,主要包含以及电源的协调工作,主要包含PowerManager.javaPowerManager.java、PowerManagerService.javaPowerManagerService.java、com_android_server_PowerManagerService.cppcom_android_server_
4、PowerManagerService.cpp、Power.javaPower.java、android_os_Power.cppandroid_os_Power.cpp。其中。其中PowerManagerService.javaPowerManagerService.java是核心,是核心,Power.javaPower.java提供底层提供底层的函数接口,与的函数接口,与JNIJNI层进行交互。层进行交互。PowerManager.javaPowerManager.java是提是提供给应用层调用的。供给应用层调用的。android_os_power.cppandroid_os_power.
5、cpp是是jnijni交互文件。交互文件。这一层的功能相对比较复杂这一层的功能相对比较复杂, ,比如系统状态的切换,背光的比如系统状态的切换,背光的调节及开关,调节及开关,Wake LockWake Lock的申请和释放等等,但这一层跟硬的申请和释放等等,但这一层跟硬件平台无关。具体功能实现以后分析。件平台无关。具体功能实现以后分析。AndroidAndroid电源框架的简介电源框架的简介 HAL层:层:该层只有一个该层只有一个Power.c文件,该文件通过文件,该文件通过sysfs的的方式与方式与kernel进行通信。主要功能有申请进行通信。主要功能有申请wake_lock,释,释放放wak
6、e_lock,设置屏幕状态等。用户空间的,设置屏幕状态等。用户空间的native 库绝库绝不能直接调用不能直接调用Android电源管理(见上图)。绕过电源管理(见上图)。绕过Android运行时的电源管理政策,将破坏该系统。所有对运行时的电源管理政策,将破坏该系统。所有对电源管理的调用应通过电源管理的调用应通过Android的的PowerManager API来来完成。完成。AndroidAndroid电源框架的简介电源框架的简介 Kernel层:层:内核层的电源管理方案实现主要包含三部分:内核层的电源管理方案实现主要包含三部分:1、Kernelpower:实现了系统电源管理框架机制:实现了
7、系统电源管理框架机制2、Archarm(or mips or powerpc)mach-XXXpm.c:实现实现对特定板的处理器电源管理对特定板的处理器电源管理3、driverspower:是设备电源管理的基础框架,为驱动提供是设备电源管理的基础框架,为驱动提供了电源管理接口。了电源管理接口。android提供了提供了几种低功耗状态:几种低功耗状态:earlysuspend、suspend、hibernation。其中,。其中,earlysuspend可以让某可以让某些设备选择进入某种功耗较低的状态,如些设备选择进入某种功耗较低的状态,如LCD灭掉;灭掉;suspend是指除电源模块以外的外围
8、模块和是指除电源模块以外的外围模块和CPU均不工作,均不工作,只有内存保持自刷新的一个工作状态;只有内存保持自刷新的一个工作状态;hibernation是指所是指所有内存镜像都被写入到磁盘中,然后系统关机,重启后系有内存镜像都被写入到磁盘中,然后系统关机,重启后系统将恢复到关机之前的状态。统将恢复到关机之前的状态。Android系统电源状态之间转换过程系统正常开机后进入到AWAKE状态, Backlight会从最亮慢慢调节到用户设定的亮度,系统screen off timer (settings-sound & display- Display settings - Screen ti
9、meout)开始计时,在计时时间到之前,如果有任何的activity事件发生,如Touch click, keyboard pressed等事件, 则将Reset screen off timer, 系统保持在AWAKE状态. 如果有应用程序在这段时间内申请了Full wake lock,那么系统也将保持在AWAKE状态, 除非用户按下power key. 在AWAKE状态下如果电池电量低或者是用AC供电screen off timer时间到并且选中Keep screen on while pluged in选项,backlight会被强制调节到DIM的状态.Android系统电源状态之间转换
10、过程系统电源的三种状态:AWAKE、SLEEP、NOTFIACTION核心服务之PoweManagerService PMS总体架构 PMS的初始化init函数和systemReady函数 PMS的唤醒锁WakeLock Power类以及LightService类介绍 PMS的用户触发事件userAcitiviy函数 Power按键处理分析核心服务之PoweManagerService核心服务之PoweManagerService2.1 电源管理的总体架构图如下核心服务之PoweManagerService 主要是为了支持省电也降低功耗,目前支持的功能:1、设置屏幕的打开与关闭2、屏幕背景灯的
11、打开与关闭3、键盘灯的打开与关闭4、按键灯的打开与关闭5、调整屏幕的亮度2.2 PowerManagerService继承结构核心服务之PoweManagerService核心服务之PoweManagerService2.3 PMS的初始化init函数核心服务之PoweManagerService PMS第三阶段的工作,此时系统中大部分服务已经创建好,即将进入就绪阶段工作,在systemReady中完成,主要工作为:第一:PowerManagerService创建SensorManager,通过它可以与对应的传感器交互,PMS仅仅是启用或者禁止特定的传感器,而来自传感器的数据将通过回调的方式通
12、知PMS,PMS根据接收到的传感事件做相应处理第二:通过setPowerState()函数设置电源状态为All_LIGHT,此时屏幕和键盘的灯全部都会亮第三:调用BatteryStatsService提供的函数,以通知屏幕打开事件,在BatteryStatsService中处理该事件。2.4 PMS的systemReady函数核心服务之PoweManagerService当系统中的服务都在systemReady()中处理完之后,系统会广播一次ACTION_BOOT_COMPLETED消息,而PMS也将处理该广播 private final class BootCompletedReceiver
13、 extends BroadcastReceiver Override public void onReceive(Context context, Intent intent) bootCompleted(); 2.5 PMS的BootCompletedReceiver广播接收器核心服务之PoweManagerServicevoid bootCompleted() Slog.d(TAG, bootCompleted); synchronized (mLocks) mBootCompleted = true;/ 调用此函数,手机将被唤醒,此时将重新计算屏幕超时的时间 userActivity(
14、SystemClock.uptimeMillis(), false, BUTTON_EVENT, true); updateWakeLockLocked(); mLocks.notifyAll(); 核心服务之PoweManagerServiceWakeLock是android系统提供给应用程序获取电力资源的唯一方法,只要还有地方使用WakeLock,系统就不会进入休眠状态。WakeLock的用法:PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);/创建一个WakeLockWakeLock wake
15、Lock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, My Tag);wakeLock.acquire();/ 获取该锁.完成其他工作wakeLock.release();/ 释放该锁这三个函数由PMS的Binder客户端的PowerManager使用2.5 PMS的WakeLock2.5.1 WakeLock客户端 WakeLock构造函数的第一个参数flags很关键,它用于控制CPU/Screen/Keyboard的休眠状态,flags的可选值核心服务之PoweManagerService由上图表分析可知:由上图表分析可知:第一:
16、第一:WakeLock只控制只控制CPU、Screen、Keyboard第二:第二:表中最后两项是附加标志,和前面其他表中最后两项是附加标志,和前面其他WakeLock组合使用,注意:组合使用,注意:PARTIAL_WAKE_LOCK比较特殊,附加标比较特殊,附加标志不能影响它志不能影响它第三:第三:PARTIAL_WAKE_LOCK不受电源键控不受电源键控制,按制,按power键不进入系统休眠(屏幕可以键不进入系统休眠(屏幕可以关闭,单关闭,单cpu不休眠)。不休眠)。客户端创建了客户端创建了WakeLock,需要调用,需要调用acquire()函数函数,而该函数又调用了而该函数又调用了PM
17、S的的 acquireWakeLock函数与函数与PMS交互以保证电交互以保证电力的供应正常。力的供应正常。核心服务之PoweManagerService客户端创建了客户端创建了WakeLock,PM需要调用需要调用acquire()函数函数,而该函数又调用了服务端而该函数又调用了服务端PMS的的 acquireWakeLock函数与函数与PMS交互以保交互以保证电力的供应正常。证电力的供应正常。核心服务之PoweManagerServicePMS的的 acquireWakeLock函数总结:函数总结:第一:如果对应的第一:如果对应的WakeLock不存在,则创建一不存在,则创建一个个Wake
18、Lock对象,同时将对象,同时将WakeLock的标志的标志转换为转换为minState,否则从,否则从mLocks中查找对中查找对应的应的WakeLock对象,然后更新其中的信息对象,然后更新其中的信息第二:当第二:当WakeLock标志和屏幕有关,需要做相标志和屏幕有关,需要做相应的处理,例如点亮屏幕,打开按键灯等,实应的处理,例如点亮屏幕,打开按键灯等,实际上这些工作不仅影响电源管理,还影响用户际上这些工作不仅影响电源管理,还影响用户体验,其中穿插了一些和用户体验相关的逻辑体验,其中穿插了一些和用户体验相关的逻辑(如(如mPreventScreenOn变量变量)第三:当第三:当WakeL
19、ock和和PARTIAL_WAKE_LOCK有关时,仅简单调有关时,仅简单调用用Power.java类的类的 acquireWakeLock函数函数即可,其中涉及和即可,其中涉及和Linux Kernel电源管理系电源管理系统交互统交互核心服务之PoweManagerServicePMS的的 acquireWakeLock函数总结:函数总结:第一:如果对应的第一:如果对应的WakeLock不存在,则创建一不存在,则创建一个个WakeLock对象,同时将对象,同时将WakeLock的标志的标志转换为转换为minState,否则从,否则从mLocks中查找对中查找对应的应的WakeLock对象,然
20、后更新其中的信息对象,然后更新其中的信息第二:当第二:当WakeLock标志和屏幕有关,需要做相标志和屏幕有关,需要做相应的处理,例如点亮屏幕,打开按键灯等,实应的处理,例如点亮屏幕,打开按键灯等,实际上这些工作不仅影响电源管理,还影响用户际上这些工作不仅影响电源管理,还影响用户体验,其中穿插了一些和用户体验相关的逻辑体验,其中穿插了一些和用户体验相关的逻辑(如(如mPreventScreenOn变量变量)第三:当第三:当WakeLock和和PARTIAL_WAKE_LOCK有关时,仅简单调有关时,仅简单调用用Power.java类的类的 acquireWakeLock函数函数即可,其中涉及和
21、即可,其中涉及和Linux Kernel电源管理系电源管理系统交互统交互核心服务之PoweManagerService PowerManagerService有时需要进行点亮屏幕,打开键盘灯等操作,为此Android提供了Power类以及LightService满足PowerManagerService的要求,这两个类比较简单,但是背后的kernel层相对复杂:3、Power类以及LightService类的介绍核心服务之PoweManagerService核心服务之PoweManagerService(1)Power类分析Power主要是提供给kernel层交互的通道,它提供了六个函数 ,通
22、过JNI接口调用底层,JNI层有对应的代码实现(在android_os_Power.cpp文件中): /获取kernel层的WakeLockpublic static native void acquireWakeLock(int lock, String id);/ 释放kernel层的WakeLock public static native void releaseWakeLock(String id);/打开或关闭屏幕public static native int setScreenState(boolean on);/ 设置超时时间 public static native int
23、 setLastUserActivityTimeout(long ms);/ 手机关机,已过期public static native void shutdown();/ 手机重启public static void reboot(String reason) throws IOException rebootNative(reason); private static native void rebootNative(String reason) throws IOException ; LightsService.Light设置了八种类型的灯,主要有两个设置了八种类型的灯,主要有两个nat
24、ive函数函数static final int LIGHT_ID_BACKLIGHT = 0; static final int LIGHT_ID_KEYBOARD = 1; static final int LIGHT_ID_BUTTONS = 2; static final int LIGHT_ID_BATTERY = 3; static final int LIGHT_ID_NOTIFICATIONS = 4; static final int LIGHT_ID_ATTENTION = 5; static final int LIGHT_ID_BLUETOOTH = 6; static
25、final int LIGHT_ID_WIFI = 7;(2)LightService类核心服务之PoweManagerServiceprivate static native void setLight_native(int ptr, int light, int color, int mode,private static native int init_native();在JNI层中对应的两个navitve函数的实现,init_native函数是初始化与硬件相关的模块lights,而PowerManagerService点亮和关闭灯时,将调用setLight_native函数对灯的相关属性进行设置,例如。灯的颜色、闪光模式,以及和闪光相关的闪光灯亮、灭时间最终传递给HAL层模块进行处理。核心服务之PoweManagerService 在手机开机后,并解锁进入到桌面,如果在规定时间内不操作手机,那么手机屏幕将变暗最后将关闭屏幕。在此过程中,如果触动手机屏幕,屏幕又会重新变亮,并且重置timeout计时器。其实这个触屏的操作调用了PMS中userActivity函数,不过需要检查所调用的进程是否有设置DEVICE_POWER的权限:此函数又调用另
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业数据资产会计核算实务培训
- Photoshop笔试题重点及详细答案(完整版)
- 2025-2026学年湖北省赤壁市初中数学九年级期末下册提升黑金试卷详细参考解析
- PCS专业技能认证考核试题
- 农田排水沟清淤及衬砌方案
- 慢性偏头痛针灸联合药物疗程规范共识
- 宫颈环扎术后活动分级管理共识
- PADI开放水域(OW)潜水员考试真题及详细答案
- Oracle 11g 数据库笔试试题及详细答案
- 咬合桩围护结构施工及桩缝控制方案
- 初中语文统编版(五四学制)六年级上册第四单元13 穷人 公开课一等奖创新教学设计
- GJB3165A-2020航空承力件用高温合金热轧和锻制棒材规范
- 小学肺结核宣传课件
- DBJ50-T-200-2024 建筑桩基础技术标准
- 贫血病人疑难病例讨论
- 动静脉瘘术后护理
- 血液透析患者安全管理
- 军队文职人员(中医学)科目近年考试真题(200题)
- 《临床技术操作规范病理学分册》医院用
- 《压力与心理健康》课件
- 乳腺结节健康科普知识讲座
评论
0/150
提交评论