精华内容
下载资源
问答
  • wakelock

    2018-06-27 13:54:06
    wakelock
    wakelock
    展开全文
  • WakeLock

    2019-04-26 10:26:12
    WakeLock应用与问题排查 adbshelldumpsyspower PSensor工作流程浅析 http://blog.csdn.net/yihongyuelan/article/details/43449851/ /** * Wake lock level: Turns the screen off when the proximi...

     

    WakeLock应用与问题排查

     

    adb shell dumpsys power

     

     

    PSensor工作流程浅析

    http://blog.csdn.net/yihongyuelan/article/details/43449851/


        /**
         * Wake lock level: Turns the screen off when the proximity sensor activates.
         * <p>
         * If the proximity sensor detects that an object is nearby, the screen turns off
         * immediately.  Shortly after the object moves away, the screen turns on again.
         * </p><p>
         * A proximity wake lock does not prevent the device from falling asleep
         * unlike {@link #FULL_WAKE_LOCK}, {@link #SCREEN_BRIGHT_WAKE_LOCK} and
         * {@link #SCREEN_DIM_WAKE_LOCK}.  If there is no user activity and no other
         * wake locks are held, then the device will fall asleep (and lock) as usual.
         * However, the device will not fall asleep while the screen has been turned off
         * by the proximity sensor because it effectively counts as ongoing user activity.
         * </p><p>
         * Since not all devices have proximity sensors, use {@link #isWakeLockLevelSupported}
         * to determine whether this wake lock level is supported.
         * </p><p>
         * Cannot be used with {@link #ACQUIRE_CAUSES_WAKEUP}.
         * </p>
         */
        public static final int PROXIMITY_SCREEN_OFF_WAKE_LOCK = 0x00000020;

    (原创)android PowerManager分析(非常详细)

    http://www.mobile-open.com/2016/922582.html

    http://blog.csdn.net/u011311586/article/details/51034313

     

    通过WakeLock的acquire和release方法Enable/Unenable PSensor  控制屏幕的亮灭

     

           WakeLock也可称之为唤醒锁,是Android提供的一种机制,用于阻止设备进入深度休眠(CPU、Memory掉电参考4 参考5)。当一个应用程序申请了WakeLock后,即使用户按下Power键关闭屏幕,该应用依然可以保持运行,如音乐播放器。

           Android提供了五种类型的WakeLock,即PARTIAL_WAKE_LOCK、SCREEN_DIM_WAKE_LOCK、SCREEN_BRIGHT_WAKE_LOCK、FULL_WAKE_LOCK、PROXIMITY_SCREEN_OFF_WAKE_LOCK。其中SCREEN_DIM_WAKE_LOCK、SCREEN_BRIGHT_WAKE_LOCK、FULL_WAKE_LOCK不再建议使用,取而代之的是android.view.WindowManager.LayoutParams#FLAG_KEEP_SCREEN_ON。PARTIAL_WAKE_LOCK表示设备CPU 持续运转,屏幕和键盘背光允许关闭,普通应用可以获取,而PROXIMITY_SCREEN_OFF_WAKE_LOCK则是PSensor的专用,只有系统APP才有权使用。

     

    触发屏幕关闭/开启流程(实际上是休眠/唤醒流程,后文解释),而整个流程分为两步:注册PSensor Listener及PSensor状态触发亮灭屏。

     

     

    PowerManagerServcie提供服务端处理逻辑,在交互中做主要电源控制工作,其中与之交互的模块最频繁的为Display,Window,Light,和Battery等

     

    PowerManagerService.WakeLocks和PowerManagerService.Display,前者是传入到底层是控制cpu唤醒状态,后者则是控制屏幕亮灭

     

    mWakefulness 标识系统当前状态共有四种定义:

    WAKEFULNESS_ASLEEP:表示系统当前处于休眠状态,只能被wakeUp()调用唤醒。

    WAKEFULNESS_AWAKE:表示系统目前处于正常运行状态。

    WAKEFULNESS_DREAMING:表示系统当前正处于屏保的状态。

    WAKEFULNESS_DOZING:表示系统正处于“doze”状态。这种状态下只有低耗电的“屏保”可以运行,其他应用进程都被挂起。

     

    获取与PowerManager相关的本地服务,比如屏保(mDreamManager),屏幕显示(mDisplayManagerInternal),窗口策略(mPolicy),电池电量(mBatteryManagerInternal)等服务,然后初始化屏幕最大亮度,最小亮度,和默认亮度

     

    userActivity()

    重新计算睡眠超时时间,灭屏超时时间,暗屏超时时间,将mUserActivitySummary 置为0,通过计算上一次的用户事件时间与超时时间作对比,来判断将屏幕置为亮屏 (USER_ACTIVITY_SCREEN_BRIGHT)还是暗屏(USER_ACTIVITY_SCREEN_DIM),前提是手机处于非睡眠状态(即需要先wakeup唤醒)

    如果时间还没到,则返回发送一个MSG_USER_ACTIVITY_TIMEOUT的定时消息,当处理时间到了,会在消息的处理方法handleUserActivityTimeout中重新调用updatePowerStateLocked()电源状态。再次调用时会根据当前的状态重新计算mUserActivitySummary 的值。

    nternal),窗口策略(mPolicy),电池电量(mBatteryManagerInternal)等服务,然后初始化屏幕最大亮度,最小亮度,和默认亮度

     

    updatePowerStateLocked为PowerManagerService的核心函数;在执行完申请锁,释放锁,用户事件,强制唤醒/睡眠等操作都需要调用updatePowerStateLocked()来更新电源状态

     

     

    wakelock

     

    Wakelock是android系统上特有的电源管理机制,只要有应用拿着这个锁,系统就不能进入睡眠状态,在上层不同的应用程序可以持有多个不同的wakelock锁,但是反映到底层就只有三种:控制系统休眠PowerManagerService.WakeLock,控制屏幕显示的PowerManagerService.Display和控制电源状态改变通知的PowerManagerService.Broadcasts。

    PowerManagerService有加锁和解锁两种状态,加锁有两种方式:

    第一种是永久的锁住,这样的锁除非显式的放开,否则是不会解锁的,所以这种锁用起来要非常的小心(默认)。

    第二种锁是超时锁,这种锁会在锁住后一段时间解锁。

     

     

    展开全文
  • Wakelock

    2016-08-02 14:39:24
    Wakelock 1安卓耗电的元凶:Wakelock  相信不少朋友都在为安卓的耗电问题所困扰,在通常的使用环境下,iOS的电源管理远比安卓优秀,这个差距主要体现在待机上——你可以将iPhone安心放在...

    Wakelock


    1 安卓耗电的元凶:Wakelock

      相信不少朋友都在为安卓的耗电问题所困扰,在通常的使用环境下,iOS的电源管理远比安卓优秀,这个差距主要体现在待机上——你可以将iPhone安心放在枕边一夜醒来电量纹丝不动,但如果换成安卓机的话,恐怕电量早已测漏光光连闹钟都不会响了。不过,虽说安卓本身是个实时多任务系统,但在待机时,系统本身是不甚耗电的,安卓4.2.2发布后电量控制更是备受好评。待机时安卓耗电飞快,主要原因还是因为第三方App滥用实时多任务的机制。


    不少安卓用户都饱受耗电之苦

      为此,不少朋友频频杀后台、清自启,但这样带来的负面效果也多得很,比如说有人用第三方App做闹钟,一不小心闹钟就不会响只能迟到了哭哭。而且后台经常是野火烧不尽,杀了又重生你奈我何,效果难以令人满意。这时候我们不妨换一种思路,通过限制第三方App的行为而非杀进程来打造一个省电的安卓环境。

      安卓耗电的元凶:Wakelock

      前面提到过,安卓本身是不甚耗电的,如果你用的是一部搭载原生系统的Nexus机器并且什么都不装,你会发现其实安卓也是个安安静静不乱吃电的好孩子。但装上一堆第三方App,特别是自带推送的App后,安卓的耗电程度呈几何级数倍增。巨大耗电量中的最大元凶,就是第三方App频频调用Wakelock。

    安卓省电 安卓耗电 安卓节电 Wakelock
    安卓应用层App频频调用Wakelock是耗电的元凶

      什么是Wakelock?根据Google官方的描述,一旦调用了Wakelock,无论屏幕开关与否,CPU都会一直保持在运行状态,永不休眠(Deep Sleep)。无论是安卓还是iOS,系统本身都支持CPU休眠,在休眠时CPU耗电远比通常情况下耗电来得少。然而,不少第三方App都会频频调用Wakelock,即使这些App对资源占用很少,CPU可以一直维持在200MHz、400MHz这样的低频率,但所耗资源依然远比休眠状态多——你醒着的时候什么都不干,消耗的能量还是要多于睡眠时候的。


    第三方App频频调用Wakelock,CPU睡不着,节电无从谈起

      这些第三方安卓App让CPU没法进入休眠状态,安卓待机时电量依然刷刷地走。如何阻止App调用Wakelock就成为了安卓省电的关键,下面我们来看看要如何让第三方App远离Wakelock吧。

    2 找出谁最爱用Wakelock

      找出谁最爱用Wakelock

      也许有的朋友会问,安卓不是自带电源监控App的吗?很遗憾,安卓自带的电源监控神通有限,只能监视哪个App经常让CPU飙高、屏幕常亮,对Wakelock不闻不问,真正的耗电元凶隐藏在云中雾里。这时候,我们需要使用专业的App来找出频频调用Wakelock的App。

      ◆BetterBatteryStats

    软件名称:BetterBatteryStats
    软件版本:1.13.4
    软件大小:2.12MB
    软件授权:免费
    适用平台:Android
    下载地址:

      BetterBatteryStats是一款久负盛名的电量监控App,其中最受欢迎的一项功能无疑就是能够查看App调用Wakelock的频率了。BetterBatteryStats并不支持中文,但使用并不复杂。进入到主界面后,点击第一栏,选中“Partial Wakelocks”,即可查看什么App调用Wakelock最多。

    安卓省电 安卓耗电 安卓节电 Wakelock 安卓省电 安卓耗电 安卓节电 Wakelock
    可以看出Google+多次调用了Wakelock

      除此以外,使用BetterBatteryStats还能够查看CPU在不同时间段的频率、后台进程所消耗资源状态等,功能之强很难在同类App中找到对手。BetterBatteryStats还提供了图表查看,电量消耗一目了然。

    安卓省电 安卓耗电 安卓节电 Wakelock 安卓省电 安卓耗电 安卓节电 Wakelock
    查看CPU和后台对电量的消耗情况

    安卓省电 安卓耗电 安卓节电 Wakelock 安卓省电 安卓耗电 安卓节电 Wakelock
    通过图表得知,系统有3小时23分钟处于休眠状态

      ◆Wakelock Detector

    软件名称:Wakelock Detector
    软件版本:1.5.4
    软件大小:1011KB
    软件授权:免费
    适用平台:Android
    下载地址:

      一看名字就知道这位仁兄是针对Wakelock而生的了。Wakelock Detector和BeeterBatteryStats一样,不支持中文,但Wakelock Detector的界面更加友好清新。Wakelock Detector的功能要比BetterBatteryStats少,用起来也更简单,点击右上角则可切换不同的选项,可以查看有什么App调用了屏幕和CPU Wakelock。

    安卓省电 安卓耗电 安卓节电 Wakelock 安卓省电 安卓耗电 安卓节电 Wakelock
    Wakelock Detector的界面更友好,一眼就看出Google地图多次调用Wakelock,是耗电真凶

    安卓省电 安卓耗电 安卓节电 Wakelock 安卓省电 安卓耗电 安卓节电 Wakelock
    可以选择不同的Wakelock查看,点击App可查看具体情况

      找到频频调用Wakelock的App后,即可针对性地作出优化,如将这些App放置到自动杀进程的列表中,不许这些App常驻后台。不过前面也提到,某些App异常顽固,通过注册系统服务反复发作,那么有没有其他什么好方法呢?

    3 绿色守护:冻住耗电的App

      绿色守护:冻住耗电的App

    软件名称:绿色守护
    软件版本:1.82
    软件大小:411KB
    软件授权:免费
    适用平台:Android
    下载地址:

      绿色守护是一款来自国人的App,用以自动冻结暂停系统中的其他App,运行时需要root权限。和传统的杀进程杀后台App相比,绿色守护并不会关闭某个App的后台,而是通过暂停App从而达到省电省资源的目的。由于绿色守护没有杀后台,自然也就不存在后台反复启动的问题。

    安卓省电 安卓耗电 安卓节电 Wakelock 安卓省电 安卓耗电 安卓节电 Wakelock
    绿色守护界面,可自动休眠App,点击+号添加App即可

      绿色守护的使用十分简单,点击界面右下方的“+”按钮,选中列表中的App后,即可将App添加到自动暂停的行列中来。绿色守护自带检查App耗电情况(包括检查Wakelock)的功能,什么App耗电一目了然。

    安卓省电 安卓耗电 安卓节电 Wakelock 安卓省电 安卓耗电 安卓节电 Wakelock
    自带耗电分析(唤醒即调用Wakelock)和资源占用分析功能

      将App添加到了绿色守护的自动休眠列表后,绿色守护在锁屏或者是App进入后台一段时间后就会将该App调整到休眠状态,这时候该App就不会再有任何动作,开启Wakelock也无从谈起。根据机友们的反映,绿色守护还是十分有用的,虽然功能单一,但实用性却不可小觑。不过要注意的是,一旦App被冻住,推送之类的功能也会无效,想要冻住QQ、微信这类App之前务必三思。

      后话

      智能手机特别是安卓机的功能和性能每年都节节飙升,但续航却一直是用户体验的阿喀琉斯之踝。安卓机的耗电为人所诟病已久,在硬件上我们很难一下子换上海量电池,不过在软件上下功夫优化还是能够取得不错的效果的,希望这篇文章能够帮到你吧。

    展开全文
  • private PowerManager.WakeLock sCpuWakeLock;private void acquireCpuWakeLock(Context context) {if (sCpuWakeLock != null) {return;}Log.v(TAG3, "acquireCpuWakeLock");sCpuWakeLock = createPartialWakeLock(c...

    private PowerManager.WakeLock sCpuWakeLock;

    private void acquireCpuWakeLock(Context context) {

    if (sCpuWakeLock != null) {

    return;

    }

    Log.v(TAG3, "acquireCpuWakeLock");

    sCpuWakeLock = createPartialWakeLock(context);

    sCpuWakeLock.acquire();

    }

    private PowerManager.WakeLock createPartialWakeLock(Context context) {

    Log.v(TAG3, "createPartialWakeLock");

    String flag = "log";

    PowerManager pm = (PowerManager) context

    .getSystemService(Context.POWER_SERVICE);

    return pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, flag);

    }

    public void releaseCpuLock() {

    if (sCpuWakeLock != null) {

    Log.v(TAG3, "releaseCpuLock");

    sCpuWakeLock.release();

    sCpuWakeLock = null;

    }

    }

    展开全文
  • Android中提供了一个名为WakeLock的类在android.os.PowerManager.WakeLock中,从名字来看WakeLock是唤醒锁的意思,它可以控制屏幕的背光开关,所以在电源管理类。 WakeLock实例化方法比较简单,因为是系统的远程...
  • android Wake Lock

    2020-11-25 11:49:31
    列出kernel层wake lock 信息 adb shell cat /sys/power/wake_lock cat /sys/power/wake_unlock 列出已经release的信息。 列出ap层的wake lock 信息 adb shell dumpsys power 并找到 Wake Locks: size=1 DOZE_WAKE_...
  • WakeLock的使用

    2019-11-19 00:05:40
    参考 Android WakeLock详解
  • 1. 内核中相关文件kernel/power/wakelock.c //wakelock核心实现kernel/power/userwakelock.c //导出用户空间使用的sysfs wakelock接口2. Framework中的相关文件PowerManagerService.java3. /sys/power/wake_lock 和 ...
  • WakeLock使用

    2016-12-12 11:08:52
    WakeLock使用 我们先来看一下Android官方对PowerManager和WakeLock的注解: PowerManager:This class gives you control of the power state of the device.WakeLock:A wake lock is a mechanism to indicate ...
  • Android powermanger wakelock

    2014-08-25 16:36:10
    Android 电源管理 -- wakelock机制,通过控制wakelock 实现保持pad 禁止休眠状态; Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠, 可以被用户态程序和内核获得. 这个锁可以是有超时的 或者 是...
  • Android Wakelock

    2014-06-03 11:08:27
    看google源码的时候,看到这个:Wakelock,百度查找。    Android中提供了一个名为WakeLock的类在android.os.PowerManager.WakeLock中,从名字来看WakeLock是唤醒锁的意思,它可以控制屏幕的背光开关,所以...
  • Android WakeLock

    2017-09-06 21:18:10
    WakeLock 主要用来控制屏幕的变暗,熄灭,CPU休眠,键盘背光灯的关闭,应用程序在持有WakeLock 时,会使设备耗电显著增加,因此在不需要持有Wakeock 对象时应该释放WakeLock对象 常用的场景: 与前台交互比较...
  • Android WakeLock简介

    2021-02-07 21:24:33
    WakeLock简介 WakeLock是一种表示应用程序需要让设备继续运行的机制,下载文件或者听音乐等等,设备在灭屏状态下,还需要继续运行,如果设备进入休眠,听音乐突然停止了,不符合使用场景。Android设备通过WakeLock...
  • Android PowerManger WakeLock

    2021-02-09 16:01:32
    Android电源锁 PowerManager负责对Android设备电源相关进行管理,而...WakeLock wakeLock = null; //获取电源锁,保持该服务在屏幕熄灭时仍然获取CPU时,保持运行,当TimerTask开始运行时加入如下方法 private void a
  • Android wakelock

    2015-09-17 18:12:48
    Android wakelock机制是为了防止系统进入suspend或其他低功耗状态,那么首先来看driver API。 那么在driver中需要include一个头文件,例如:struct state { struct wakelock wakelock; }; init () { wake_lock_...
  • Android WakeLock详解

    万次阅读 2015-07-14 14:00:07
    目录目录 前言 WakeLock使用 WakeLock levelAndFlags和使用场景 参考场景 WakeLock源码分析 ...这篇文章主要是介绍如何使用WakeLock,应该还达不到详解的地步,各位同学感兴趣的可以看一下WakeLock的基本使用方法。
  • PowerManager之WakeLock

    千次阅读 2014-07-05 21:36:50
    WakeLock
  • Android wakelock && suspend

    2020-10-27 22:07:13
    suspend一、Wakelock1.1 WakeLock说明1.2 WakeLock使用1.3 PMS下WaeLock从上到下流程图1.4 wakelock sysfs节点1.5 wakeup_sources1.6 wakelock architecture二、Suspend2.1 Suspend从上到下流程图总结 由于博主...
  • Android WakeLock无效问题

    千次阅读 2019-03-28 16:30:44
    Android在锁屏下使用WakeLock无效的原因可能是: 任务还没有完成就调用wakelock.release()释放了锁。 例如下面的代码是无效的 while(true){ wakeLock.acquire(); ··· wakeLock.release(); Thread.current...
  • Android WakeLock休眠锁

    千次阅读 2018-04-05 14:29:24
    WakeLock(休眠锁)   WakeLock用于保持设备的唤醒状态,有些情况下,即时用户不操作App,我们也需要保持屏幕处于唤醒状态,以保证用户体验,比如视频类APP和计步类APP,视频类APP需要屏幕一直保持常量,计步类...
  • WakeLock的介绍与使用

    千次阅读 2017-04-21 21:27:38
    1.什么是WakeLock  WakeLock是一种机制,表示应用需要设备保持运行(stay on)。  WakeLock默认是引用计数,如果WakeLock是引用计数的话,则调用了几次acquire()方法,就需要调用对应次数的release()方法才能真正...
  • 前面我们介绍Doze模式的时候介绍过WakeLock白名单,WakeLock进入Doze接口等。这篇博客我们详细分析下,WakeLock在Doze模式下如何生效。设置白名单在DeviceIdleController中我们调用PowerManagerService的如下接口,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,213
精华内容 16,485
关键字:

wakeLock