当前位置:文档之家› Android电源管理框架解析

Android电源管理框架解析


Android电源框架的简介
1.2 电源管理框架的结构组织
Android的电源管理主要是通过锁和定时器来切 换系统的状态,使系统的功耗降至最低,整个系 统的电源管理架结构分为四大部分:应用层,框 架层,HAL层和Kernel层。
Android电源框架的简介
Android电源框架的简介
HAL层:该层只有一个Power.c文件,该文件通过sysfs的 方式与kernel进行通信。主要功能有申请wake_lock,释 放wake_lock,设置屏幕状态等。用户空间的native 库绝 不能直接调用Android电源管理(见上图)。绕过 Android运行时的电源管理政策,将破坏该系统。所有对 电源管理的调用应通过Android的PowerManager API来 完成。
核心服务之PoweManagerService
核心服务之PoweManagerService
(2)LightService类 LightsService.Light设置了八种类型的灯,主要有两个
native函数
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 final int LIGHT_ID_WIFI = 7;
Android系统电源状态之间转换过程
系统电源的三种状态:AWAKE、SLEEP、 NOTFIACTION
核心服务之PoweManagerService
PMS总体架构 PMS的初始化init函数和systemReady函数 PMS的唤醒锁WakeLock Power类以及LightService类介绍 PMS的用户触发事件userAcitiviy函数 Power按键处理分析
核心服务之PoweManagerService
3、Power类以及LightService类的介绍 PowerManagerService有时需要进行点亮屏幕,打 开键盘灯等操作,为此Android提供了Power类以及 LightService满足PowerManagerService的要求,这 两个类比较简单,但是背后的kernel层相对复杂:
Android电源框架的简介
Kernel层:内核层的电源管理方案实现主要包含三部分:
1、Kernel\power\:实现了系统电源管理框架机制
2、Arch\arm(or mips or powerpc)\mach-XXX\pm.c:实现 对特定板的处理器电源管理 3、drivers\power:是设备电源管理的基础框架,为驱动提供 了电源管理接口。
核心服务之PoweManagerService
2.5.1 WakeLock客户端 WakeLock构造函数的第一个参数flags很关键,它 用于控制CPU/Screen/Keyboard的休眠状态,flags 的可选值
核心服务之PoweManagerService
由上图表分析可知: 第一:WakeLock只控制CPU、Screen、 Keyboard 第二:表中最后两项是附加标志,和前面其他 WakeLock组合使用,注意: PARTIAL_WAKE_LOCK比较特殊,附加标 志不能影响它 第三:PARTIAL_WAKE_LOCK不受电源键控 制,按power键不进入系统休眠(屏幕可以关 闭,单cpu不休眠)。
核心服务之PoweManagerService
(1)Power类分析
Power主要是提供给kernel层交互的通道,它提供了六个函数 ,通过 JNI接口调用底层,JNI层有对应的代码实现(在 android_os_Power.cpp文件中): //获取kernel层的WakeLock public 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 setLastUserActivityTimeout(long ms); // 手机关机,已过期 public static native void shutdown(); // 手机重启 public static void reboot(String reason) throws IOException
mLocks.notifyAll(); } }
核心服务之PoweManagerService
2.5 PMS的WakeLock WakeLock是android系统提供给应用程序获取电力资 源的唯一方法,只要还有地方使用WakeLock,系统就 不会进入休眠状态。WakeLock的用法:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); //创建一个WakeLock WakeLock wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_L OCK, "My Tag"); wakeLock.acquire();// 获取该锁 ….......完成其他工作 wakeLock.release();// 释放该锁
核心服务之PoweManagerService 2.2 PowerManagerService继承结构
核心服务之PoweManagerService
2.3 PMS的初始化init函数
核心服务之PoweManagerService
2.4 PMS的systemReady函数 PMS第三阶段的工作,此时系统中大部分服务已经 创建好,即将进入就绪阶段工作,在systemReady 中完成,主要工作为: 第一:PowerManagerService创建SensorManager, 通过它可以与对应的传感器交互,PMS仅仅是启用 或者禁止特定的传感器,而来自传感器的数据将通 过回调的方式通知PMS,PMS根据接收到的传感事 件做相应处理 第二:通过setPowerState()函数设置电源状态为 All_LIGHT,此时屏幕和键盘的灯全部都会亮 第三:调用BatteryStatsService提供的函数,以通知 屏幕打开事件,在BatteryStatsService中处理该事
android提供了 几种低功耗状态:earlysuspend、 suspend、hibernation。其中,earlysuspend可以让某 些设备选择进入某种功耗较低的状态,如LCD灭掉; suspend是指除电源模块以外的外围模块和 CPU均不工作, 只有内存保持自刷新的一个工作状态;hibernation是指所 有内存镜像都被写入到磁盘中,然后系统关机,重启后系 统将恢复到关机之前的状态。。
PMS的 acquireWakeLock函数总结: 第一:如果对应的WakeLock不存在,则创建一 个WakeLock对象,同时将WakeLock的标志 转换为minState,否则从mLocks中查找对应 的WakeLock对象,然后更新其中的信息 第二:当WakeLock标志和屏幕有关,需要做相 应的处理,例如点亮屏幕,打开按键灯等,实 际上这些工作不仅影响电源管理,还影响用户 体验,其中穿插了一些和用户体验相关的逻辑 (如mPreventScreenOn变量) 第三:当WakeLock和 PARTIAL_WAKE_LOCK有关时,仅简单调
核心服务之PoweManagerService
2.1 电源管理的总体架构图如下
核心服务之PoweManagerService
主要是为了支持省电也降低功耗,目前支持的功能: 1、设置屏幕的打开与关闭 2、屏幕背景灯的打开与关闭 3、键盘灯的打开与关闭 4、按键灯的打开与关闭 5、调整屏幕的亮度
客户端创建了WakeLock,需要调用acquire()
核心服务之PoweManagerService
客户端创建了WakeLock,PM需要调用 acquire()函数,而该函数又调用了服务端PMS 的 acquireWakeLock函数与PMS交互以保证 电力的供应正常。
核心服务之PoweManagerService
核心服务之PoweManagerService
PMS的 acquireWakeLock函数总结: 第一:如果对应的WakeLock不存在,则创建一 个WakeLock对象,同时将WakeLock的标志 转换为minState,否则从mLocks中查找对应 的WakeLock对象,然后更新其中的信息 第二:当WakeLock标志和屏幕有关,需要做相 应的处理,例如点亮屏幕,打开按键灯等,实 际上这些工作不仅影响电源管理,还影响用户 体验,其中穿插了一些和用户体验相关的逻辑 (如mPreventScreenOn变量) 第三:当WakeLock和 PARTIAL_WAKE_LOCK有关时,仅简单调
Android电源管理框架
1.Android系统电源管理框架简介 2.Android系统电源状态之间转换过程 3.Android核心服务之PoweManagerService
Android电源框架的简介 1.1 Android电源管理概述
相关主题