powermanagerservice分析
来源:互联网 发布:北大青鸟陈璇java视频 编辑:程序博客网 时间:2024/06/01 03:57
PowerManagerService分析:
Pms负责处理设备是否唤醒,外部接口和内部逻辑相对简单一些,下面是系统结构:
对应应用层,pms开放出去的接口,以powemanager为接口类,提供如下操作:
Wakelock:提供锁操作。
PreventScreenOn:屏幕暗屏,5s后点亮。
userActivity:设置超时。
Gotosleeep:jni调用。
内部实现上,在pms内部有两个变量mWakelockState和mUserState决定暗灭,锁机制影响mWakelockState变量,userActivity接口影响mUswerState变量。
在pms中有个locklist,当调用wakelock.acquireWakeLock时,生成一个wakelock,加入到locklist中,然后取locklist锁的集合生成mWakeLockState。
屏幕逐渐变暗是通过内部一个timeout实现的,调用setTimeOutLocked设置超时,在timeoutTask中执行超时处理。间隔值通过serScreenOffTimeOutsLocked刷新。
锁有两个附加属性,ON_AFTER_RELEASE 是在release wake时,会再调用userActivity刷新超时;ACQUIRE_CAUSES_WAKEUP是在获取锁时,会激活原先失活的锁,这个激活操作在useractivity中也有。与激活对应的失活操作在gotosleep中,这个接口在按power键时调用,这个后面会讲到。
外部交互:
按power键,亮屏时,inputreader从驱动取得事件后,inputdispatch会调用策略器做过滤,在策略器PhoneWindowManager的interceptkeybeforequeueing中处理结果会是ACTON_GO_TO_SLEEP,当inputdispatch判断处理结果是ACTION_GO_TO_SLEEP时,会从jni层调用pms的gotosleep方法。 如果是灭屏情况下,在PhoneWindowManager的interceptbeforequeueing的方法中会调用mKeyguardMediator.onWakekeyWhenkeyguardShowTq,这个因为涉及到锁屏的东西,我们暂时不跟,不过现在可以了解一下它里面是锁机制实现。
Pms和ams的交互:
在setPowerState中,会根据当前亮灭屏发送notification,处理notification时,会调用ams的goingtosleep/wakeingup。
Pms和keyguard的交互:
当keyguard处理show/hide时,会调用pms的enableUserActivity,这个方法会控制pms的内部变量mUserActivityAllowed,由其名得其意,后者是用于控制userActivity操作是否可以进行。
- powermanagerservice分析
- Android PowerManagerService分析
- android PowerManagerService分析
- PowerManagerService深入分析
- PowerManagerService framework层的分析
- Adroid4.4之PowerManagerService分析
- Android5.1 PowerManagerService深入分析
- android4.4 PowerManagerService流程分析
- android4.4 PowerManagerService流程分析
- android6.0 PowerManagerService状态分析
- android6.0 PowerManagerService dream分析
- android6.0 PowerManagerService Notifier分析
- Android 6.0 PowerManagerService状态分析
- PowerManagerService流程分析(电源管理)
- Android系统--PowerManagerService电源管理分析
- Android PowerManagerService和PowerManager 源码分析
- Android7.0 PowerManagerService亮灭屏分析(一)
- Android7.0 PowerManagerService亮灭屏分析(二)
- Linux 的多线程编程的高效开发经验
- 《Objective-C编程之道:iOS设计模式解析》学习笔记——第1章
- UVA 497 Strategic Defense Initiative【最长严格递增子序列长度及打印】
- eclipse 引入java包
- vi学习笔记
- powermanagerservice分析
- 代码大全第二版(第一章):欢迎进入软件构建的世界
- 第三次实验
- 常用Hash算法(C语言实现)
- 闭散列表及其查找算法的实现
- c int 转string 和string 转int
- 公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。
- 老工程改造为MAVEN工程(简单改造)
- SWT:StackLayout(堆栈式布局)