1, Android中支持的电源状态:

PM_SUSPEND_ON -- 设备处于全电源状态,也就是正常工作状态;

PM_SUSPEND_MEM -- suspend to memory,设备进入睡眠状态,但所有的数据还保存在内存中,只有某些外部中断才可以唤醒设备。

PM_SUSPEND_STANDBY ----- 在大部分的Android设备中均不支持。

2, Early Suspend / Late Resume

在Android中,增加了系统休眠的层次,把休眠划分为深度睡眠(sleep)和浅度睡眠(idle)。

因此当系统往 /sys/power/state 节点写入 mem (如在命令行写入: echo mem > /sys/power/state)将会使系统进入睡眠。参考HAL中:hardware/libhardware_legacy/power/power.c : set_screen_state ------> write (on / mem ) to /sys/power/state

浅度睡眠 仅仅是关掉背光,fb, sensor,触摸屏等在关屏状态下不需要使用的设备,而整个CPU和大部分外设还是正常工作的。

深度睡眠sleep 与 浅度睡眠 idle 之间切换的过程如上所示。

3, Android的 Wake Lock

Android系统提供了两种类型的锁:

WAKE_LOCK_SUSPEND -- 阻止系统进入suspend状态;

WAKE_LOCK_IDLE -- 阻止系统进入idle状态;

wake lock 可以设置超时释放,在持有wake lock一个固定时间之后自动释放。一般应用在系统正在处理一些事情的时候,防止系统进入深度睡眠而干扰了正在处理的任务; 尤其是在做了硬件唤醒的,当唤醒之后要处理一些响应,为了防止系统马上再次进入休眠,在设置一个超时锁。

如系统能否进入深度睡眠,当系统处在idle时,会不断判断是否还有WAKE_LOCK_SUSPEND

4, 电源状态切换的调试:

/sys/power/state

/sys/power/wake_lock

/sys/power/wake_unlock

1) cat /sys/power/state -----查看系统状态, echo mem > /sys/power/state ---- 将系统设置为进入休眠

2) echo "name" > /sys/power/wake_lock ----- 申请一个锁

cat /sys/power/wake_lock -----查看系统的wake lock 情况

wake_unlock 同样。

3) echo 15 > /sys/module/wakelock/parameters/debug_mask ------------

这样wakelock的驱动会把每次的wakelock操作都打印在console上,对于调试为什么suspend不下去这类的问题很有用。如下所示:

[ 1062.912297] wake_lock: mmc_delayed_work, stop expire timer
[ 1062.922395] wake_unlock: mmc_delayed_work, start expire timer, 990
[ 1062.931174] wake_lock: event0-79, start expire timer, 989
[ 1062.933710] wake_lock: event0-79, start expire timer, 989
[ 1062.939081] wake_lock: event0-79, start expire timer, 989
[ 1062.961143] wake_lock: event0-79, start expire timer, 986

更多相关文章

  1. android6.0 状态栏添加图标 举例Location
  2. android 之activity生命周期(转载)
  3. Android的生命周期 Start onResume
  4. Android仿照淘宝,京东,当当购物平台
  5. Android在listview添加checkbox实现单选多选操作问题
  6. 实用代码3
  7. Android(安卓)保存和恢复activity的状态数据
  8. Android(安卓)使用ViewStub 实现多状态页面切换基类
  9. 搭建arm-linux-gcc交叉编译工具链环境(Android原生(JNI)开发环境

随机推荐

  1. 【Android】Android清除本地数据缓存代码
  2. Android安全论文汇集
  3. Android(安卓)Studio的.gitignore以及git
  4. [置顶] Android下实现自动关机的方法总结
  5. Android的MediaRecorder架构介绍
  6. android 的ListView中,判断其已滚动到最顶
  7. Android(安卓)动态添加View 并设置id
  8. Android(安卓)Studio安装Genymotion插件
  9. Android(安卓)不同API版本 向后兼容
  10. Android的Appwidget TextView中没有更新(