随笔 - 19  文章 - 0  评论 - 30  阅读 - 14万

android休眠唤醒流程2

android系统一段时间没有操作,
    屏幕(screen)将从高亮(bright)变为暗淡(dim),如果再过段时间还是没有操作,屏幕(screen)从暗淡(dim)变为关闭(off).这时,系统将进入休眠.
    而对于某些需要保持系统唤醒甚至屏幕唤醒的应用(比如视频播放器和音乐播放器)来说,就必须要有一个机制,使得系统不进入休眠状态,设置保持屏幕亮屏状态.
    wakelock即用来实现以上目的

先上网上偷来的一副图,说一下android系统的整个电源管理流程图

android休眠

接下来对每一个模块具体分析:

powermanager
    对应文件是android/frameworks/base/core/java/android/os/PowerManager.java

在Android中应用程序并不是直接同PowerManagerService交互的,而是通过PowerManager间接地与PowerManagerService打交道。
    此文件定义了一个powermanager类.
        主要实现了
            1,wakelock的申请与释放
                public WakeLock newWakeLock(int flags, String tag)
            2,系统延时进入休眠
                public void userActivity(long when, boolean noChangeLights)
            3,系统强制休眠
                public void goToSleep(long time)
            4,屏幕亮度设置
                public void setBacklightBrightness(int brightness)   
            5,屏幕状态查询
                public boolean isScreenOn()
            6,系统重启
                public void reboot(String reason)

    细节
        wakelock的申请与释放
            {@samplecode
                *PowerManager pm = (PowerManager)mContext.getSystemService(
                *                                          Context.POWER_SERVICE);
                *PowerManager.WakeLock wl = pm.newWakeLock(
                *                                      PowerManager.SCREEN_DIM_WAKE_LOCK
                *                                      | PowerManager.ON_AFTER_RELEASE,
                *                                      TAG);
                *wl.acquire();
                * // ...
                *wl.release();
        一共有如下几个flag来进行不一样的唤醒方式.可以根据需要设置
                Flag Value                   CPU     Screen      Keyboard
                PARTIAL_WAKE_LOCK            On*      can-off      Off
                SCREEN_DIM_WAKE_LOCK         On       Dim          Off
                PROXIMITY_SCREEN_OFF_WAKE_LOCK on      距离传感器时关闭  off
                SCREEN_BRIGHT_WAKE_LOCK      On       Bright       Off
                FULL_WAKE_LOCK               On       Bright       Bright

        ACQUIRE_CAUSES_WAKEUP        确保wakelock,主要用于视频播放器
        ON_AFTER_RELEASE = 0x20000000    release后倒计时,关闭屏幕
        ...

userActivity的作用:
    使系统从其他状态进入全部打开状态,比如从暗屏(dim)切换到亮屏,并重置倒计时计数器
   

(待续)

posted on   joseph_伽拉  阅读(9736)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示