二、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. Linux Kernel and Android(安卓)休眠与唤醒(中文版)
  2. android开发之源码级分析(系统启动流程 & Handler消息机制 & Asyn
  3. Android(安卓)onTouchEvent, onClick及onLongClick的调用机制
  4. Android(安卓)自定义view完全解析--带你通透了解自定义view
  5. Android:异步调用详解
  6. Android与H5交互,以及WebView加载进度条
  7. Android(安卓)AIDL(Android(安卓)Interface Definition Language
  8. android Activity生命周期总结
  9. Android和H5之间的交互

随机推荐

  1. Android SDK Manager 无法更新SDK
  2. 如何为Android,Mac和Windows平台创建Java
  3. android与.NET webservice
  4. Android空引用问题的解决方法——on a nu
  5. android学习轨迹之二:Android权限标签uses
  6. android引入so文件常见问题
  7. Android沉浸式状态栏(透明状态栏)
  8. android 中的 Bitmap 相关
  9. Android 静默更新安装 apk
  10. Android ListView分隔线