Android系统--PowerManagerService电源管理分析_carpowermanagementservice android12-程序员宅基地

技术标签: PowerManager  PowerManagerService  framework  电源管理  Android  

PowerManagerService

代码参考:http://blog.csdn.net/iefswang/article/details/38701709 并加上自己的理解和补充

简介

PowerManagerService服务是Android系统的上层的电源管理服务,主要负责系统待机、屏幕背光、按键背光、键盘背光以及用户事件的处理。通过锁的申请与释放以及默认的待机时间来控制系统的待机状态;通过系统默认灭屏时间以及用户操作的事件状态控制背光亮、暗。该服务还包括了光线、距离传感器上层查询与控制,LCD亮度的调节最终也是由该服务完成。

PowerManagerService如何来进行电源管理,那就要有外部事件的时候去通知它,WindowManagerService会把用户的点击屏幕,按键等作为user activity事件来调用userActivity函数,PowerManagerService就会在userActivity里面判断事件类型作出反映,是点亮屏幕提供操作,还是完全不理会,或者只亮一下就关掉。

电源管理架构图如下:

 

开机启动及处理

当系统开启时,在SystemServer.java的run接口通过将power服务加入到系统服务中:

power = new PowerManagerService();

ServiceManager.addService(Context.POWER_SERVICE, power);

当光感服务与电池管理服务都开始后进行power服务的初始化:

// only initialize the power service after we have started the

// lights service, content providers and the battery service.

power.init(context, lights, ActivityManagerService.self(), battery,

          BatteryStatsService.getService(),

          ActivityManagerService.self().getAppOpsService(), display);


Init()接口实现一些基本的初始化工作,包括将lights和battery两个服务实例传入到power服务中,这两个服务将与power进行交互。另外,开启了两线程,其中有一个比较重要的线程后期用于处理亮度动画的: 

mScreenBrightnessAnimator.start( );

mScreenBrightnessAnimator为PowerManagerService子类ScreenBrightnessAnimator的实例。

mHandlerThread = new HandlerThread("PowerManagerService")

mHandlerThread.start( );

另外一个PowerManagerService线程完成接下来的部分初始化工作。start后,会调用到run接口,并在其中回调到子类中的protected void onLooperPrepared()中,该接口又调用到initInThread( ),主要实现一些值的初始化,并标识mInitComplete = true;这时,mHandlerThread.notifyAll();通知mHandlerThread的Looper实例创建,该实例在systemReady( )接口中被SystemSensorManager(mHandlerThread.getLooper());使用。还有一个地方需要注意一个,在initThread中还实现了一个设置的监听:mSettings.addObserver(mSettingsObserver);如果用户在系统中变更了关于背光时间或是否启用光感等,PowerManagerService能获取到最新的状态值,通过update()进行更新。

  此外,在系统准备就绪后,systemservice.java中会调用power.systemReady( );该接口主要进行一些配置值的读取,如Lcd背光、键盘背光等数组配值。

当系统完全启动,即ActivityManagerService中的finishBooting()发出bootCompleted广播后:

broadcastIntentLocked(null, null, new Intent(Intent.ACTION_BOOT_COMPLETED, null),null, null, 0, null, null, android.Manifest.permission.RECEIVE_BOOT_COMPLETED, false, false, MY_PID, Process.SYSTEM_UID, Binder.getOrigCallingUser());

此时,PMS中会收到该广播BootCompletedReceiver,接收广播后进行处理

private void handleBootCompletedLocked() {

        final long now = SystemClock.uptimeMillis();

        mBootCompleted = true;

        mDirty |= DIRTY_BOOT_COMPLETED;

        userActivityNoUpdateLocked(

                now, PowerManager.USER_ACTIVITY_EVENT_OTHER, 0,              Process.SYSTEM_UID);  //好像是模拟触发一次按键事件件 

        updatePowerStateLocked(); //更新电源状态

}

 

和应用层交互:

在Android中应用程序并不是直接同PowerManagerService交互的,而是通过PowerManager间接地与PowerManagerService打交道。不过在使用PowerManager和PowerManager,WakeLock之前,我们要首先在APP中申请使用如下权限:

<uses-permission android:name = "android.permission.WAKE_LOCK" />

<uses-permission android:name = "android.permission.DEVICE_POWER"/>

而APP能够与PowerManager做哪些交互,我们可以看到PowerManage提供了如下公共的接口:

PowerManager

PowerManagerService

goToSleep(long time)

goToSleep(long eventTime, int reason)

isScreenOn()

isScreenOn()

reboot(String reason)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hs969342065/article/details/41725083

智能推荐

需要求3个长方柱的体积,请编一个基于对象的程序。数据成员包括length(长)、width(宽)、height(高)。要求用成员函数实现以下功能: (1) 由键盘分别输入3个长方柱的长、宽、高; (2_,需婴求 了 个长方柱的体积,诸编一个基于时家的期序、当现员电width(究)、height-程序员宅基地

文章浏览阅读9k次,点赞9次,收藏45次。需要求3个长方柱的体积,请编一个基于对象的程序。数据成员包括length(长)、width(宽)、height(高)。要求用成员函数实现以下功能:(1) 由键盘分别输入3个长方柱的长、宽、高;(2)计算长方柱的体积;(3)输出3个长方柱的体积。请编写程序,上机调试并运行。法一:#include<iostream>using namespace std;class Box{ public: void get_value(); float volume(); voi_,需婴求 了 个长方柱的体积,诸编一个基于时家的期序、当现员电width(究)、height

spring源码解读之 JdbcTemplate源码_jdbctemplate原码-程序员宅基地

文章浏览阅读6.3k次,点赞9次,收藏22次。在Spring中,JdbcTemplate是经常被使用的类来帮助用户程序操作数据库,在JdbcTemplate为用户程序提供了许多便利的数据库操作方法,比如查询,更新等,而且在Spring中,有许多类似 JdbcTemplate的模板,比如HibernateTemplate等等 - 看来这是Rod.Johnson的惯用手法, 所谓模板板式,就是在父类中定义算法的主要流程,而把一些个性_jdbctemplate原码

Linux 操作系统 Red Hat Enterprise Linux 安装教程-程序员宅基地

文章浏览阅读2.1k次。安装此操作系统的难题在于,在安装此系统之前,自己的操作系统是 Windows,而这两个系统是不兼容的。也就是说,如果当前的操作系统是 Windows,那就必须使用外部介质(如 U 盘)来安装其它操作系统,且此 U 盘内的操作系统必须先于电脑系统盘中的 Windows 启动。假设读者此时已经安装好 RHEL 了,前面已经提到过,RHEL 不是免费的,因此此处还需要订阅 RHEL。一种是内置的 GUI 界面,另一种是在终端使用命令。另外,下载时要选择 DVD 版本的,这个版本的安装包将近 10G,请留意。_red hat enterprise

python 自动化 mysql 部署,Python自动化运维之前端部署Mysql架构(三)-程序员宅基地

文章浏览阅读131次。Hello,大家好!我是小安Sir,上一期主要讲到数据模型和表单,那么这期讲下前端的一些功能怎么实现。本文会针对每一个按钮的预览、删除、执行进行讲解,涉及的语言有点点多,但是我们要做的是取重点部分拿来学习以达到举一反三。Python自动化运维前端部署Mysql架构三本文大纲Attention1. 预览任务2. 删除任务3.执行任务任务列表011.1 任务列表界面相信大家看这个任务列表已经看了很多..._python,mysql,js,css的部署图

iOS 15 真机调试包 DeviceSupport-程序员宅基地

文章浏览阅读4.5k次。iOS 15真机调试包, DeviceSupport 提取自 Xcode Version 13.0 beta (13A5154h) 路径 /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport_devicesupport

关于一名零基础蒟蒻ACM变强的路子_蒻蒻acm-程序员宅基地

文章浏览阅读694次,点赞4次,收藏3次。虽然我说的可能并不适合每一个人,但这是我自己切实走出来的路子,希望能给各位后辈学习ACM提供一点简单的帮助。_蒻蒻acm

随便推点

mybatis---resultMap标签-程序员宅基地

文章浏览阅读640次。resultMap用来解决实体类中的属性与数据库表中列名不匹配的问题1. 实体类package com.wy.bean;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.util.Date;/** * @author HelloWorld * @create 2021-06-22-19:07 * @email 154803771@qq._resultmap标签

遥感基础之:LAI、FPAR、PAR、APAR-程序员宅基地

文章浏览阅读1.3w次,点赞10次,收藏52次。LAI(leaf area index)叶面积指数=叶片总面积/土地面积。叶面积指数(LAI)是反映植物群体生长状况的一个重要指标,反映植被覆盖程度,也能在一定程度反映植被覆盖厚度。是无量纲的参数,随时间动态变化,因生长环境和植被种类特征、叶子形状、特性有很大区别,其大小和植被种类、生长期、叶片倾角、叶簇、非叶生物量有关,还受到测量方法影响。Qi/Q0=e^-k(LAI)[1]李瑾.呼伦贝尔温带草地PAR分量变化规律及FPAR/LAI模型的验[J].2010. DOI:10.7666/d.y173._fpar

CSS3新增伪类汇总_css3的伪类-程序员宅基地

文章浏览阅读1.7w次,点赞4次,收藏39次。:root 选择文档的根元素,等同于 html 元素:empty 选择没有子元素的元素:target 选取当前活动的目标元素:not(selector) 选择除 selector 元素意外的元素:enabled 选择可用的表单元素:disabled 选择禁用的表单元素:checked 选择被选中的表单元素:after 在元素内部最前添加内容_css3的伪类

STM32CubeMonitor的使用第一部分-数据绘图以及仪表显示_stm32在做大量历史数据显示图要注意-程序员宅基地

文章浏览阅读3.1k次,点赞4次,收藏14次。STM32CubeMonitor可以理解为STM32的组态软件,他能快速将STM32运行过程中的变量通过仪表盘或者历史数据曲线图展示出来,而且还包含了大量功能。当由于本刚刚开始学习,且网上关于STM32CubeMonitor的使用教程较少,且大部分都是抄的,所以现在出一系列关于STM32CubeMonitor的实用教程。_stm32在做大量历史数据显示图要注意

干掉 SQL 中的 like,我用 es 后运营小姐姐们都说好快!-程序员宅基地

文章浏览阅读99次。点击关注公众号,Python干货及时送达来源 |juejin.cn/post/6889020742366920712一、前言二、关于搜索搜索引擎原理三、倒排索引1. 几个概念2. 索引内..._sql like如果不放弃索引 和es效率比较

连通图的割点、割边(桥)、块、缩点,有向图的强连通分量-程序员宅基地

文章浏览阅读4.8k次,点赞2次,收藏5次。连通图的割点、割边(桥)、块、缩点,有向图的强连通分量 【本文摘选自百度文库】一、基本概念无向图割点:删掉它之后(删掉所有跟它相连的边),图必然会分裂成两个或两个以上的子图。块:没有割点的连通子图 割边:删掉一条边后,图必然会分裂成两个或两个以上的子图,又称桥。缩点:把没有割边的连通子图缩为一个点,此时满足任意两点间都有两条路径相互可达。求块跟求缩点非常相似,

推荐文章

热门文章

相关标签