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

先上网上偷来的一副图,说一下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)切换到亮屏,并重置倒计时计数器

(待续)

android休眠唤醒流程2的更多相关文章

  1. android休眠唤醒驱动流程分析【转】

    转自:http://blog.csdn.net/hanmengaidudu/article/details/11777501 标准linux休眠过程: l        power managemen ...

  2. Android休眠唤醒机制简介(二)

    本文转载自:http://blog.csdn.net/zhaoxiaoqiang10_/article/details/24408911 Android休眠唤醒机制简介(二)************* ...

  3. Android休眠唤醒机制

    有四种方式可以引起休眠 ①在wake_unlock()中, 如果发现解锁以后没有任何其他的wake lock了, 就开始休眠 ②在定时器到时间以后, 定时器的回调函数会查看是否有其他的wake loc ...

  4. Android休眠唤醒机制简介(一)【转】

    本文转载自:http://blog.csdn.net/zhaoxiaoqiang10_/article/details/24408129 Android休眠唤醒机制简介(一) ************ ...

  5. android 休眠唤醒机制分析(二) — early_suspend

    本文转自:http://blog.csdn.net/g_salamander/article/details/7982170 early_suspend是Android休眠流程的第一阶段即浅度休眠,不 ...

  6. android 休眠唤醒机制分析(一) — wake_lock

    本文转自:http://blog.csdn.net/g_salamander/article/details/7978772 Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一 ...

  7. android 休眠唤醒机制分析(一) — wake_lock【转】

    Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一有效的wake_lock,系统就不能进入深度休眠,但可以进行设备的浅度休眠操作.wake_lock一般在关闭lcd.tp但系统 ...

  8. android 休眠唤醒机制分析(三) — suspend

    本文转自:http://blog.csdn.net/g_salamander/article/details/7988340 前面我们分析了休眠的第一个阶段即浅度休眠,现在我们继续看休眠的第二个阶段 ...

  9. android的休眠和唤醒流程

    android休眠唤醒流程: power按键事件上报给android系统,最终由windownmanager接收到,当有按键事件时判断是否需要休眠后唤醒系统,然后调用powermanager系统服务去 ...

随机推荐

  1. SQL随机数的生成

    下面是一个随机函数问题,获取两位数的随机数,且不重复. 但是说明一下,这个函数有点bug,例如:两位数的函数最后能生成89个,如果将数量改成90,那么就无法生成,陷入死循环了. IF object_i ...

  2. andriod Kernel configuration is invalid

    error:  ERROR: Kernel configuration is invalid.         include/generated/autoconf.h or include/conf ...

  3. 【转】解析Java finally

    下文写的关于Java中的finally语句块什么时候执行的问题.什么时候执行呢?和return.continue.break.exit都有关系,尤其return语句非常有意思,于是分享给大家.谢谢Sm ...

  4. asp.net asp:TextBox控件绑定值后,获取不到新值问题解决方法

    把Page_Load里绑定的代码放在    if(!IsPostBack){}里面后,即可获取到更新的值. 意思为第一次加载执行.

  5. angular入门系列教程4

    主题: 本篇主要目的就是继续完善home页下的index子页面的内容,处理一个列表,进行增删改查过滤等操作. 效果图: 细节: 主要的更改有两个,一个是修改模板index.html,还有就是增加控制器 ...

  6. hihocoder #1300 : 展胜地的鲤鱼旗 dp

    题目链接: http://hihocoder.com/problemset/problem/1300 题解: 先用栈预处理出每个‘)’匹配的‘(’的位子,放在pos数组中. dp[i]表示以i结尾的合 ...

  7. 17.2 The DispatcherServlet

    综述: Spring’s web MVC framework is, like many other web MVC frameworks, request-driven, designed arou ...

  8. C#调用大漠插件的方法和实例

    大漠插件是一个很不错的东西,在按键精灵和易语言里面用得很多,可以后台找图找字,写游戏自动脚本用得特别多.前面写一个微信的自动脚本,查了一些资料,易语言不太熟悉,按键精灵功能上可能不好实现,就找了些资料 ...

  9. 已收录的帝国cms文章被误删除了怎么办?

    我们一直提倡网站要经常备份,但是有时也会遗忘,一不小心被谁删除了那就欲哭无泪了.就像ytkah刚弄了一个站,开了个权限比较高的后台帐号给别人用,居然把两三个栏目都删除了,想发狂啊.刚好又有段时间没备份 ...

  10. 初学tornado之MVC版helloworld

    作者:the5fire | 标签: MVC  tornado  | 发布:2012-08-06 2:41 p.m. 文接上篇,看我一个简单的helloworld,虽然觉得这个框架着实精小,但是实际开发 ...