PowerManagerServcie

PowerManagerServcie(PMS)

  • 1. 电源管理架构
  • 2.电源管理4个层次
  • 3.电源管理服务 - PowerManagerService

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/132493.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 单元测试设置

单元测试检查特定代码单元或模块是否按照开发人员的预期执行。 大多数时候,我们测试的代码单元是一个函数。 同样,我们可以测试所有功能。 作为最佳实践,至少在开发过程中,我们应该进行单元测试。 因此,在开发过程的…

windows创建服务:更新服务信息乱码问题(ChangeServiceConfig)

因为小项目需要创建windows服务,安装微软官方示例一切都挺顺利,代码运行后发现配置的信息在系统里显示乱码。打开注册表发现的确是乱码。这就排除软件读取得问题,而是调用ChangeServiceConfig系统函数写入时就发生了乱码。让我在网上查找了一…

读书笔记-《ON JAVA 中文版》-摘要26[第二十三章 注解]

文章目录 第二十三章 注解1. 基本语法1.1 基本语法1.2 定义注解1.3 元注解 2. 编写注解处理器2.1 编写注解处理器2.2 注解元素2.3 默认值限制 3. 使用javac处理注解4. 基于注解的单元测试5. 本章小结 第二十三章 注解 注解(也被称为元数据)为我们在代码…

Web应用-Thinkphp框架-开发指南

Thinkphp框架 二级导航分类,模板继承,内置标签Public 修改MVC模块化 ——访问机制传参加载模版模版引入 分离Runtime 缓存文件管理员添加数据验证及验证场景 控制器 validate 在sql执行(敏感操作)之前验证数据模板 分页数据表连接…

nextjs构建服务端渲染,同时使用Material UI进行项目配置

一、创建一个next项目 使用create-next-app来启动一个新的Next.js应用,它会自动为你设置好一切 运行命令: npx create-next-applatest 执行结果如下: 启动项目: pnpm dev 执行结果: 启动成功! 二、安装Mater…

深入理解强化学习——标准强化学习和深度强化学习

分类目录:《深入理解强化学习》总目录 强化学习的历史 早期的强化学习,我们称其为标准强化学习。最近业界把强化学习与深度学习结合起来,就形成了深度强化学习(Deep ReinforcemetLearning)。因此,深度强化…

C语言中常用的字符串处理函数(strlen、strcpy、strcat、strcmp)

文章目录 写在前面1. strlen1.1 函数介绍1.2 模拟实现 2. strcpy2.1 函数介绍2.2 模拟实现 3. strcat3.1 函数介绍3.2 模拟实现 4. strcmp4.1 函数介绍4.2 模拟实现 写在前面 本篇文章介绍了C语言中常用的字符串处理函数,包括strlen、strcpy、strcat和strcmp。文章…

[开源]基于流程编排的自动化测试工具,插件驱动,测试无限可能

一、开源项目简介 流程编排,插件驱动,测试无限可能 一款基于流程编排的自动化测试工具 二、开源协议 使用Apache-2.0开源协议 三、界面展示 四、功能概述 在软件开发旅程中,测试流程的管理和执行常常是复杂且耗时的挑战。传统测试工具主…

云原生Kubernetes:K8S集群版本升级(v1.20.15 - v1.22.14)

目录 一、理论 1.K8S集群升级 2.集群概况 3.升级集群(v1.21.14) 4.验证集群(v1.21.14) 5.升级集群(v1.22.14) 6.验证集群 (v1.22.14) 二、实验 1.升级集群(v1.21.14) 2.验…

JAVA学习第一天,java的运行方式

对未来很迷茫,不知道以后能出去干什么,好像掌握的东西很少,从今天开始学习学习java吧,让自己充实起来,记录一下。 jav…

python结合excel数据轻松实现接口自动化测试

在刚刚进入测试行业的时候,最开始也是做功能测试,我想很多伙伴和我一样,觉得自动化测试都很高端,很神秘。迫不及待的想去学习作自动化测试。 以前比较常用数据库python做自动化,后面发现excel个人觉得更加适合&#x…

js的indexOf方法

一、数组调用 indexOf() 方法可返回数组中某个指定的元素位置。 该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start参数时)。如果找到一个 item,则返回 item 的第一…