PowerManagerServcie

本文详细阐述了Android系统中的PowerManagerService,包括其在电源管理架构中的核心地位,从应用接口到内核层的四个层次解析,以及与唤醒、屏幕控制等关键功能的关联。
摘要由CSDN通过智能技术生成

1. 电源管理架构

PowerManagerService是android系统电源管理的核心服务。
PowerManagerService继承自SystemService,在SystemServer的main()方法中,调用了自身的run()方法,并在run()方法中启动三类服务:引导服务、核心服务和其他服务,引导服务中启动的是一些依赖性比较强的服务,其中就包括了PMS,通过Binder和其他组件进行交互等。

PowerManagerService在Framework层本质为策略控制方案,其作用为:

向上提供给应用程序接口,例如音频场景中保持系统唤醒、消息通知中唤醒手机屏幕场景;
向下决策HAL层以及Kernel层来控制设备待机状态,控制显示屏、背光灯、距离传感器、光线传感器等硬件设备的状态;

2.电源管理4个层次

在这里插入图片描述

  1. 应用接口层(PowerManager.java)
      PowerManager向应用提供了相应的接口,以供应用程序调用,应用可以调用PM的接口申请wakelock,唤醒系统,改变屏幕状态,屏幕亮度,或使系统进入睡眠等操作.PowerManager是PowerManagerService的代理类,PowerManager向上层应用提供交互的接口,具体的处理工作在PowerManagerService中完成。
    PowerManager相关接口:
    a、Wakeup():
      hide接口,不开放给应用。作用:强制系统从睡眠状态唤醒;应用想唤醒系统必须通过设置亮屏标志;
    b、gotoSleep():
      hide接口,不开放给应用。作用:强制系统进入睡眠状态
    c、userActivity():
      向PowerManagerService报告影响系统休眠的用户活动,重新计算灭屏时间,背光亮度,例如触屏、滑屏、power键等用户行为
    d、Wakelock:
      wakelock是PowerManager的一个内部类,提供了相关的接口来操作wakelock锁,比如newWakeLock()方法来创建wakelock锁,acquire()和release()方法来申请和释放锁;
    e、isDeviceIdleMode():
      返回设备当前的状态,如果处于Idle状态,则返回true,Idle状态是在手机长时间没有被使用以及没有运动的情况下,手机进入到一种Doze低功耗的模式,这种状态下手机可能会关掉网络数据访问,可以通过监视DEVICE_IDLE_MODE_CHANGED这个广播信息,来监控手机状态的改变

  2. Framework层(PowerManagerService.java)
    应用调用PowerManager开放的接口的实现方是PowerManagerService;
    PowerManagerService计算系统中和Power 相关的计算,是整个电源管理的决策系统。同时协调Power如何与系统其它模块的交互,比如亮屏,暗屏,系统睡眠,唤醒等等;

  3. HAL层(Power.c)
      该层只有一个power.c文件,该文件通过上层传下来的参数,向/sys/power/wake_lock 或者/sys/power/wake_unlock文件节点写数据来与kernel进行通信,主要功能是申请/释放锁,维持屏幕亮灭;

  4. 内核层(kernel/Power)
     内核层实现电源管理的方案主要包含三个部分:
      (1)Kernel/power/:实现了系统电源管理框架机制;
      (2)Arch/arm(ormips or powerpc)/mach-XXX/pm.c:实现对特定板的处理器电源管理;
      (3)drivers/power:是设备电源管理的基础框架,为驱动提供了电源管理接口。
    内核中Suspend功能有关的代码包括PM core、Device PM、Platform PM等几大块,具体分布如下:
    PM Core
    kernel/power/main.c----提供用户空间接口(/sys/power/state)
    kernel/power/suspend.c----Suspend功能的主逻辑
    kernel/power/suspend_test.c----Suspend功能的测试逻辑
    kernel/power/console.c----Suspend过程中对控制台的处理逻辑
    kernel/power/process.c----Suspend过程中对进程的处理逻辑
    Device PM
    drivers/base/power
    Platform dependent PM
    include/linux/suspend.h----定义platform dependent PM有关的操作函数集
    arch/xxx/mach-xxx/xxx.c 或者 arch/xxx/plat-xxx/xxx.c ----平台相关的电源管理操作

3.电源管理服务 - PowerManagerService

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值