android电源
文章平均质量分 84
kc专栏
深入探索android Framework层代码,博客持续更新中!!!
展开
-
Android9.0 应用待机群组
一、概述 Android 9 引入了一项新的电池管理功能,即应用待机群组。应用待机群组可以基于应用最近使用时间和使用频率,帮助系统排定应用请求资源的优先级。 根据使用模式,每个应用都会归类到五个优先级群组之一中。 系统将根据应用所属的群组限制每个应用可以访问的设备资源。五个群组按照以下特性将应用分组:活跃如果用户当前正在使用应用,应用将被归到“活跃”群组中,例如:应用已启动一个...原创 2019-01-22 15:10:58 · 7358 阅读 · 0 评论 -
深入分析android5.1 healthd
healthd主要是读取电池节点的信息,传给BatteryService。或者在关机充电等使用。注意healthd中使用的是kernel的log。下面先从main函数分析int main(int argc, char **argv) { int ch; int ret; klog_set_level(KLOG_LEVEL); healthd_mode_op原创 2015-08-05 19:52:17 · 8061 阅读 · 0 评论 -
android6.0 PowerManagerService Notifier分析
这个类在PowerManagerService中是非常重要的,当PowerManagerService的状态改变时,都是靠这个类通知。比如常用的灭屏和亮屏广播,也是在这个类中发送的。一、Notifier初始化首先我们来看它在PowerManagerService构造函数中的初始化: mNotifier = new Notifier(Looper.getMa原创 2016-06-07 20:30:54 · 3093 阅读 · 0 评论 -
android6.0 PowerManagerService dream分析
上一篇博客分析了PowerManagerService的各种状态,最后分析到dream相关,讲的不详细。这里我们再分析下。一、Dream关闭首先我们结合打印的log,看看handleSandman函数,log直接加在下面的函数中。当然我们现在说的情况是mWakefulness是dozing状态。 private void handleSandman() { // runs原创 2016-06-07 11:31:47 · 5022 阅读 · 1 评论 -
android6.0 PowerManagerService状态分析
这篇博客我们主要分析下PowerManagerService的各个状态,主要从goToSleep,wakeUp,userActivity,nap函数作为入口分析。一、PowerManagerService的goToSleep函数我们先来看下goToSleep函数:goToSleep函数主要调用了goToSleepInternal函数: private void原创 2016-06-06 20:04:11 · 9488 阅读 · 7 评论 -
android6.0 power显示(亮度等)深入分析(二)DisplayManagerService
上篇博客我们分析了,PowerManagerService和DisplayPowerController这两个类,我也提到了和android5.1的变化,把背光这块放到了DisplayManagerService中了,之前这块没有分析过,今天分析下DisplayManagerService和背光的关系。看了DisplayManagerService的注释,发现现在所以的显示设备都放在Displ...原创 2019-01-22 15:08:39 · 7543 阅读 · 3 评论 -
android6.0 power显示(亮度等)深入分析(一)PowerManagerService & DisplayPowerController
之前android5.1我们分析过power,但是那篇博客从整体分析显得有些杂乱,这几篇博客都从power的功能来分析,个人觉得更好理解。 一、PowerManagerService的显示相关函数由于之前博客都分析过,我们就直接进入PowerManagerService的和显示相关的主体:updateDisplayPowerStateLocked函数: private b...原创 2019-01-22 15:08:34 · 6888 阅读 · 2 评论 -
android6.0 power按键深入分析
这篇博客主要分析power按键点亮屏幕和灭屏,而且我们主要分析在PhoneWIndowManager的流程。之前的博客我们分析过按键的流程,当有按键会先到PhoneWindowManager的interceptKeyBeforeQueueing函数,然后再去分析到应用,而power按键也是如此,并且其最后不会分发到应用中去,下面我们看下PhoneWindowManager的interceptK原创 2016-06-02 20:28:20 · 12789 阅读 · 0 评论 -
Android6.0 wakelock深入分析
这篇博客我们分析下Power的持锁,从PowerManager到PowerManagerService再到hal分析。一、PowerManager的持锁接口我们先来看下PowerManager对应用提供的接口: public WakeLock newWakeLock(int levelAndFlags, String tag) { validateWakeLock原创 2016-06-02 14:30:21 · 8473 阅读 · 1 评论 -
andjroid5.1 BatteryManager深入分析
BatteryManager主要是去主动查看电池状态,主要通过binder通信去healthd中查看电池的各个属性。可以看下BatteryManager的主要代码 private long queryProperty(int id) { long ret; if (mBatteryPropertiesRegistrar == null) {原创 2015-05-25 14:00:14 · 3202 阅读 · 0 评论 -
Android5.1AlarmManagerService深入分析(Android4.4补充)
由于在我的博客中Android4.4已经比较详细的分析了AlarmManagerService,因此这里主要分析一下差异,在我看来5.1的在AlarmManagerService的改动还是比较大的。先看AlarmManager新增了一个接口: public void setAlarmClock(AlarmClockInfo info, PendingIntent operat原创 2015-05-12 10:55:24 · 5292 阅读 · 1 评论 -
Android 8.0 App Standby
一、概述低电耗模式和应用待机模式是从Android M引入的新特性,之前一直没有分析,低电耗模式就是Doze,应用待机模式就是 App Standby。Doze模式我们之前分析过了,Doze模式在Android N又有修改,Android 6.0(API 级别 23)引入了低电耗模式,当用户设备未插接电源、处于静止状态且屏幕关闭时,该模式会推迟 CPU 和网络活动,从而延长电池寿命。而 A...原创 2019-01-22 15:10:52 · 2010 阅读 · 0 评论 -
android4.4 锁屏灭屏时间的设置
屏幕自动灭屏的时间和userActivity事件相关,而这个灭屏时间的获取是在PowerManagerService中getScreenOffTimeoutLocked函数。 private int getScreenOffTimeoutLocked() { int timeout = mScreenOffTimeoutSetting; if (isMax原创 2017-09-21 10:42:02 · 5619 阅读 · 0 评论 -
Android6.0 亮屏灭屏流程(DisplayPowerControler、WMS)(二)亮度设置
上一篇博客我们主要分析了在setScreenState中调用PhoneWindowManager的一些流程,在setScreenState中先是调用了DisplayPowerState的setScreenState函数。上篇博客我们没有分析,这篇博客我们先从这个函数开始分析,主要分析下亮度的设置流程。 public void setScreenState(int state) {...原创 2019-01-22 15:09:19 · 4858 阅读 · 3 评论 -
Android6.0 亮屏灭屏流程(DisplayPowerController、WMS)(一)WMS绘制
亮屏、灭屏流程整个流程涉及的模块比较多,包括PowerManagerService、DisplayPowerControl、WMS、AMS。因此在分析完WMS之后,我们把这块也分析下。DisplayPowerControl我们知道灭屏流程的发起是在PowerManagerService中,会通过updatePowerState函数调用updateDisplayPowerStateL原创 2017-01-19 15:22:34 · 7888 阅读 · 1 评论 -
Android7.0 Doze模式分析(三)alarm
上篇博客分析了Doze模式下WakeLock,这篇我们分析Alarm。白名单首先我们从白名单开始,在DeviceIdleController中会设置alarm的白名单。 public final class LocalService { public void setDeviceIdleUserWhitelist(int[] appids) { ...原创 2019-01-22 15:09:37 · 4098 阅读 · 1 评论 -
Android7.0 Doze模式分析(二)wakelock
前面我们介绍Doze模式的时候介绍过WakeLock白名单,WakeLock进入Doze接口等。这篇博客我们详细分析下,WakeLock在Doze模式下如何生效。 设置白名单在DeviceIdleController中我们调用PowerManagerService的如下接口,来设置WakeLock的白名单。注意这里设置的appid就是uid。 @Override ...原创 2019-01-22 15:09:32 · 3798 阅读 · 1 评论 -
Android7.0 Doze模式分析(一)Doze介绍 & DeviceIdleController
参考:http://blog.csdn.net/gaugamela/article/details/52981984在Android M中,Google就引入了Doze模式。它定义了一种全新的、低能耗的状态。 在该状态,后台只有部分任务被允许运行,其它任务都被强制停止。在之前的博客中分析过Doze模式,就是device idle状态。可能有的地方分析的不是很详细,现在在andro...原创 2019-01-22 15:09:25 · 7696 阅读 · 6 评论 -
android5.1BatteryService深入分析
先贴一张类与类之间的关系图:构造函数只是从资源中取一些值。 public BatteryService(Context context) { super(context); mContext = context; mHandler = new Handler(true /*async*/); mLed =原创 2015-05-11 18:50:09 · 4236 阅读 · 0 评论 -
AlarmManagerService的hal层分析
之前我们分析过AlarmManagerService了,这里我们主要分析下其hal层。我们先来看onStart这段代码: public void onStart() { mNativeData = init();这个init函数是native函数,是用来初始化hal层的。mNativeData数据就是从hal层函数返回。一、有alarm设备我们看下原创 2016-06-12 17:07:53 · 2165 阅读 · 0 评论 -
Android4.4 灭屏kill第三方app
在android4.4上添加功能当手机短按power键,灭屏的时候。kill三方的app进程。在我之前的博客中分析过,按键处理,会从InputManager的native层,先到PhoneWindowManager的interceptKeyBeforeQueueing函数,先对按键进行处理,比如power键,会禁止把这Event传给应用。下来我们来看下源码实现: @Override原创 2015-12-23 15:36:02 · 2364 阅读 · 0 评论 -
android4.4 车载灭屏 按任意键及触摸屏幕恢复亮屏
车载上的android4.4系统,基本上常亮。但最近需要一个新功能可以在launcher新增一个按钮,点击的时候。屏幕亮度为0,但实际上不等于按power键,不会睡眠。然后可以按任意键恢复亮度,包括触屏事件。一、PowerManagerService原先屏幕亮度流程PowerManagerService是通过updateDisplayPowerStateLocked函数,把亮度原创 2016-02-22 14:16:06 · 4983 阅读 · 0 评论 -
and5.1PowerManagerService深入分析(二)PowerManager中各函数
上一篇博客把PMS里的构造函数和sytemReady分析了下:今天主要从PowerManager中的接口入手去分析PowerManagerService.先分析PowerManager中的一个内部类WakeLock,可以使用这个类持睡眠锁。下面是PowerManager中WakeLock内部类来里面的代码: public void acquire() {原创 2015-08-26 13:02:11 · 4337 阅读 · 1 评论 -
and5.1PowerManagerService深入分析(三)updatePowerStateLocked函数
PMS更新各个状态,最终都会调用updatePowerStateLocked函数,下面我们来分析下 private void updatePowerStateLocked() { if (!mSystemReady || mDirty == 0) {//mDirty=0代表没有变化,或者系统没有准备好,直接退出 return; }原创 2015-08-26 16:26:59 · 3821 阅读 · 0 评论 -
and5.1PowerManagerService深入分析(四)PMS与Display模块
PMS与Display模块的交互在之前的一篇博客也写过,但不是写的很详细。在PMS的systemReady方法中,有如下两段代码: mDisplayManagerInternal = getLocalService(DisplayManagerInternal.class); mDisplayManagerInternal.initPowerManag原创 2015-08-27 14:42:00 · 3985 阅读 · 0 评论 -
Android6.0 设备Idle状态(一)DeviceIdleController
Android6.0上power改动比较大,粗略的看PowerManagerService的话感觉变动不大,只是在PowerManagerService的改动代码比较少,但是其实质改动较大,特别增加了这个DeviceIdleController,来控制设备的Idle状态。而当设备在idle状态时,它会忽略cpu的wakelock,Alarm等。因此DeviceIdleController在po...原创 2019-01-22 15:07:06 · 11095 阅读 · 7 评论 -
Android6.0 设备Idle状态(二)AlarmManagerService setIdleUntil接口
在上一篇博客中的DeviceIdleController中讲到了AlarmManager的setIdelUntil接口,设置后除非是白名单中的应用,其他应用设置Alarm都会无效。我们今天就来分析下这个接口。 一、set接口对flag中带了FLAG_IDLE_UNTIL的Alarm处理先来看AlarmManager中: public void setIdleUntil(...原创 2019-01-22 15:07:23 · 4138 阅读 · 2 评论 -
深入android6.0 设备 idle状态
原文地址:http://blog.csdn.net/licaomengRICE/article/details/48735957原文链接:https://newcircle.com/s/post/1739/2015/06/12/diving-into-android-m-doze注意:这篇博文的所有描述都是基于Android‘M’开发者预览的第一版本。因为新的版本(包括码代码)已经发布转载 2016-01-21 11:46:59 · 14263 阅读 · 0 评论 -
Android6.0 设备Idle状态(三) PowerManagerService
新增的Idle状态感觉在PowerManagerService的代码变动不大,但是其功能其实还有很大的变化,我们先看下持锁这个函数新加的地方。一、持wakelock的流程 private void acquireWakeLockInternal(IBinder lock, int flags, String tag, String packageName,原创 2016-01-21 14:58:31 · 2330 阅读 · 0 评论 -
andriod6.0低功耗模式(关闭wifi、蓝牙、gps、屏幕亮度等)
之前android5.0一篇博客分析过了android低功耗模式,这边我们就直接分析代码:一、新增功能函数位置在低功耗的最后生效的函数中,增加一个函数,执行我们需要的功能: void updateLowPowerModeLocked() { if (mIsPowered && mLowPowerModeSetting) { if (原创 2016-03-10 10:04:39 · 3233 阅读 · 0 评论 -
and5.1PowerManagerService深入分析(一) PMS的初始化以及低功耗模式
之前已经分析过PMS了,但是不是非常详细。现在准备详细的分析下PMS。先看下构造函数: public PowerManagerService(Context context) { super(context); mContext = context; mHandlerThread = new ServiceThread(TAG,原创 2015-08-25 18:34:07 · 3757 阅读 · 0 评论 -
Android BatteryStatsHelper深入理解(and5.1)
BatteryStatsHelper这个类主要是统计各个应用,多用户的每个用户,以及蓝牙,屏幕等耗电统计。一般使用BatteryStatsHelper这个类,先要new一个实例,然后再调用create函数:下面我们就先从create分析,两种create方法,其中sStatsXfer是静态的 public void create(BatteryStats stats) {原创 2015-08-04 14:47:10 · 9395 阅读 · 3 评论 -
android6.0 otg连接设备 点亮屏幕(案例)
现在我们otg连接设备的时候有点亮屏幕的需求。解决方法我们可以在识别设备的时候,去调用PowerManager的wakeup唤醒(点亮)设备。void InputReader::processEventsLocked(const RawEvent* rawEvents, size_t count) { for (const RawEvent* rawEvent = rawE原创 2016-02-18 11:10:44 · 3726 阅读 · 1 评论 -
Android5.1 PowerManagerService深入分析
PowerManagerService提供Android系统的电源管理服务,废话不多说,直接看代码。先从构造函数,代码如下: public PowerManagerService(Context context) { super(context); mContext = context; //创建处理消息的线程 mHand原创 2015-05-06 16:47:46 · 10210 阅读 · 2 评论 -
android4.4 healthd深入分析
先看healthd,healthd直接查看设备节点中各种电池属性,然后调用BatteryService的update函数,下来先看healthd的代码。int main(int argc, char **argv) { int ch; klog_set_level(KLOG_LEVEL); while ((ch = getopt(argc, arg原创 2015-05-07 16:42:49 · 3554 阅读 · 0 评论 -
android 4.4 batteryservice 电池电量显示分析
转载地址:http://blog.csdn.net/daweibalang717/article/details/40615453最近工作接触到这么的东西,这是我对整个电池管理方面Java 层的分析。如果想了解底层的话,请看我的博客:android 4.4 电池电量管理底层分析(C\C++层) (http://blog.csdn.net/daweibalang717/article/d转载 2015-05-07 18:00:30 · 13365 阅读 · 0 评论 -
android4.4 AlarmManagerService深入分析
AlarmManager深入分析转载地址http://blog.csdn.net/codefly/article/details/17058425,自己补充了一些代码分析 1.概述 在Android系统中,闹钟和唤醒功能都是由Alarm Manager Service控制并管理的。我们所熟悉的RTC闹钟以及定时器都和它有莫大的关系。为了转载 2015-05-08 10:43:35 · 5688 阅读 · 0 评论 -
android5.1添加android长按power键重启功能
当用户长按power键的时候,系统会在PhoneWindowManager中调用mGlobalActions.showDialog,来显示关机、飞行、重启等界面选项。而我们需要在GlobalActions.java中创建一个重启的选项。下面我们从GlobalActions中的createDialog节选一段代码: mItems = new ArrayList();原创 2015-05-20 09:26:42 · 5808 阅读 · 0 评论 -
android5.1 PowerManagerService和DisplayPowerControler、DisplayPowerState关系
PowerManagerService在updateDisplayPowerStateLocked中与DisplayPowerControler交互,详细看代码: private boolean updateDisplayPowerStateLocked(int dirty) { final boolean oldDisplayReady = mDisplayReady;原创 2015-05-26 09:48:52 · 3742 阅读 · 0 评论 -
Android5.1 电池充电剩余时间计算
android5.1手机在充电的时候,并且在锁屏界面的时候会显示还剩多少时间电池充满电。我们就这个机制进行下深入分析:首先对电池的变化都会监听BatteryService发出的Intent.ACTION_BATTERY_CHANGED广播,因此在framework目录下全局搜索,结果发现在./base/packages/Keyguard/src/com/android/keyguard原创 2015-07-13 15:20:29 · 7538 阅读 · 4 评论