二、Android 休眠(suspend)介绍

1、android系统休眠的简单介绍

android系统用的也是linux内核,但是他也是有不同的,由于它的特殊性,故代码在linux内核休眠基础上进行了整改。

下面是对android内核已经实现的suspend做一个讲解,suspend to disk将会在调试的文件中涉及

在一个打过android补丁的内核中,state_store()函数会走另外一条路,会进入到request_suspend_state()中,这个文件在earlysuspend.c中.这些功能都是android系统加的,后面会对earlysuspend和lateresume进行介绍。

涉及到的文件:

android4.1/kernel/power/main.c

android4.1/kernel/power/earlysuspend.c

android4.1/kernel/power/wakelock.c

2、android系统休眠涉及的几个特点

下面介绍几个android系统涉及的比较独特的特性

1)EarlySuspend

Early suspend是android引进的一种机制,这个机制作用在关闭显示的时候,一些和显示有关的设备,比如LCD背光,重力感应器,触摸屏,这些设备都会关掉,但是系统可能还是在运行状态(这时候还有wakelock)进行任务的处理,例如在扫描SD卡上的文件等.在嵌入式设备中,背光是一个很大的电源消耗,所以android会加入这样一种机制。

2)LateResume

Late Resume是和suspend配套的一种机制,是在内核唤醒完毕开始执行的,主要就是唤醒在EarlySuspend的时候休眠的设备.当所有的唤醒已经结束以后,用户进程都已经开始运行了,唤醒通常会是以下的几种原因:

来电

如果是来电,那么Modem会通过发送命令给rild来让rild通知WindowManager有来电响应,这样就会远程调用PowerManagerService来写"on"到/sys/power/state来执行lateresume的设备,比如点亮屏幕等.

用户按键用户按键事件会送到WindowManager中,WindowManager会处理这些按键事件,按键分为几种情况,如果案件不是唤醒键(能够唤醒系统的按键)那么WindowManager会主动放弃wakeLock来使系统进入再次休眠,如果按键是唤醒键,那么WindowManger就会调用PowerManagerService中的接口来执行Late Resume.

Late Resume会依次唤醒前面调用了EarlySuspend的设备.

3)WakeLock

Wake Lock在Android的电源管理系统中扮演一个核心的角色.WakeLock是一种锁的机制,只要有人拿着这个锁,系统就无法进入休眠,可以被用户态程序和内核获得。这个锁可以是有超时的或者是没有超时的,超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了,内核就会启动休眠的那套机制来进入休眠。

4)AndroidSuspend

当用户写入mem或者standby到/sys/power/state中的时候,state_store()会被调用,然后Android会在这里调用request_suspend_state()而标准的Linux会在这里进入enter_state()这个函数.如果请求的是休眠,那么early_suspend这个workqueue就会被调用,并且进入early_suspend状态。调用request_suspend_state()后在suspend_work_queue工作线程上面注册一个early_suspend_work工作者,

然后又通过staticDECLARE_WORK(early_suspend_work,early_suspend);注册一个工作任务early_suspend。所以系统最终会调用early_suspend函数。

5)注册加入suspend和resume流程

platform_device_register()-->platform_device_add()-->device_add()-->device_pm_add()-->,最终加入到了dpm_list的链表中,在其中的dpm_suspend和dpm_suspend中通过遍历这个链表来进行查看哪个device中包含suspend和resume项。

个人观点,有问题请斧正!!

转载请注明出处:http://blog.csdn.net/wang_zheng_kai


更多相关文章

  1. android开发之源码级分析(系统启动流程 & Handler消息机制 & Asyn
  2. Android输入系统概述
  3. Android系统做了哪些优化?
  4. Android之路-------浅淡Android历史、系统架构与开发特色
  5. android该系统的应用API选择演示版本
  6. 在Ubuntu上下载、编译、运行Android系统
  7. Android 4.0中按键的处理流程
  8. Android中应用调用系统权限

随机推荐

  1. 安卓布局详细
  2. https://developers.google.com/chrome/m
  3. android中使用wakelock
  4. 一个很有深度的Android Blog
  5. Android 新手入门指导
  6. android 签名
  7. Android studio生成APK打包,修改生成APK的
  8. Android 支持的文件类型
  9. Android控件属性大全
  10. Step Detector and Step Counter Sensors