;
关注kaiyun官方网站掌握最新行业动态与资讯
当前位置: 首页 > kaiyun新闻 > 行业动态

kaiyun.comAndroid电源管理系列之PowerManagerService(一)

发布日期:2024-04-19 访问量: 来源:kaiyun官方网站

 

PowerManagerService 提供Android系统的电源管理服务,主要功能是控制系统待机状态,屏幕显示,亮度调节,光线/距离传感器的控制等。

相关代码在以下文件中

初始化流程

跟其他系统服务一样,PowerManagerService也是继承于SystemService并通过SystemServer启动。
SystemServer

PowerManagerService

在SystemServer的startBootstrapServices中,通过SystemServiceManager.startService启动了PowerManagerService,下面首先来看PowerManagerService构造方法。

PowerManagerService构造函数中首先创建了处理消息的进程及对应的handler对象以进行消息处理,然后创建SuspendBlocker对象,用于WakeLocks与Display,并设置mWakefulness的初始状态为WAKEFULNESS_AWAKE,最后进入到native层初始化。下面先看一下关于mWakefulness的定义。

继续回到PowerManagerService构造函数的native初始化中,首先来看nativeInit的实现。

PowerManagerService中的native方法定义如上,nativeInit即调用nativeInit()。

nativeInit的主要任务时装载power模块,该模块由厂商实现,以高通为例,如下。

Android电源管理系列之PowerManagerService(一)

power_module中实现了init,powerHint,setInteractive,nativeInit最终调用到HAL power模块的power_init具体实现中。接着看native初始化nativeSetAutoSuspend的实现。

nativeSetAutoSuspend最终调用到libsuspend(参考Android电源管理系列之libsuspend)的autosuspend_disable禁止系统休眠。继续看native初始化nativeSetInteractive,nativeSetFeature的实现

同nativeInit一样,最终都是调用到HAL power模块的具体实现中。以上是构造函数的分析流程,下面继续看PowerManagerService在系统启动过程中回调onStart(),onBootPhase(),systemReady()的实现。

onStart()中发布了BinderService,LocalService分别供其他进程,进程内其他服务调用,并将PowerManagerService加入到Watchdog监控中。

onBootPhase中主要设置mBootCompleted状态,更新PowerState状态,并执行mBootCompletedRunnables中的runnables方法(低电量模式会设置)。

userActivity
userActivity是定义在PowerManager中的SystemApi,用户向PowerManagerService报告用户活动,以更新PowerManagerService内部时间/状态值,推迟系统休眠的时间。下面首先来看userActivity的定义。

PowerManager中userActivity请求调用服务端PowerManagerService BinderService的userActivity,即调用内部方法userActivityInternal。kaiyun.com

kaiyun官方

userActivityInternal中首先调用userActivityNoUpdateLocked更新相关数据及状态(***NoUpdateLocked仅仅更新内部状态并不采取任何操作),然后调用updatePowerStateLocked更新所有PowerState,下面分析userActivityNoUpdateLocked的实现,updatePowerStateLocked是PowerManagerService的核心方法,在最后进行分析。

gotoSleep
gotoSleep在PowerManager中的定义如下:

与userActivity一样,gotoSleep最终将调用到goToSleepInternal。

Android电源管理系列之PowerManagerService(一)

goToSleepInternal中将执行goToSleepNoUpdateLocked更新内部状态,同样在updatePowerStateLocked中更新PowerState的操作。

goToSleepNoUpdateLocked中更新mLastSleepTime,mWakefulness,mDirty状态。

返回列表
分享:

Copyright © 2019 kaiyun官方网站股份有限公司.粤ICP备16017609号

粤公网安备44030402003674号

网站地图 | XML地图

微信关注 微信关注
微博
0755-83218588
TOP