作者RealJack ()
看板AndroidDev
标题Re: [问题] 休眠模式
时间Tue Feb 18 10:05:29 2014
这个部分我之前有碰过一些
可以大概提供一些方向
但不足的地方可能需要请自行补足
wakeup source需要硬体支援
例如Qualcomm的chip可以指定GPIO为wakeup source
设成wakeup source的装置在休眠过程中会耗电
因为有供电才能运作
假如来电时手机是休眠状态
但仍可以接电话是因为接收电话是modem负责的
此时CPU会被modem唤醒,萤幕才会亮起来
原文提到的状态都有加上USER_
user指的应该是user space的process
我认为休眠的目的是省电
真正的休眠模式应该是CPU没有运作
从休眠到唤醒的过程如下:
early suspend -> suspend -> resume -> late resume
USER_SLEEP "当下"还没完全进入休眠模式喔,这要怎麽说呢?
只要能看到log就不算是休眠,不论是alog或klog
因为需要CPU运作才能印log
要先知道android运作在user space,底层还有linux kernel在跑
从kolog可以看到休眠过程会有以下两行:
I/klogd ( 306): [ 245.934411] Freezing user space processes ...
I/klogd ( 306): [ 246.213398] Freezing remaining freezable tasks ...
大致上是android先睡且device关闭後,linux kernel才会睡
至少是上面第二行log印完後才算是进入休眠
另外,proximity sensor也会被要求设成wakeup source
通话时proximity会开始运作,脸接近萤幕时会变暗
过一会系统会进入休眠,CPU睡了只剩modem运作
不过由於proximity被设成wakeup source,所以也还在运作
只要脸一离开就马上发出interrupt唤醒CPU
此时CPU会去执行proximity的driver,把proximity关闭
※ 引述《LVE (强尼屁股)》之铭言:
: 宝杰好 大家好 各位版友午安
: 最近在研究android的休眠状态
: 爬了网路上的文章之後,大部分都是归类下列三种状态
: USER_AWAKE, //Full on status
: USER_NOTIFICATION, //Early suspended driver but CPU keep on
: USER_SLEEP // CPU enter sleep mode
: 平时使用者操作时都是在AWAKE 状态下
: 当按下萤幕锁,或者休眠时间一到,会先进入notification模式
: 之後会查看有没有app使用 wake lock
: 当所有 wake lock都释放之後,系统才会真正进入休眠
应该是说wake lock都释放後才"可以"去睡
但不代表没有任何wake lock就"一定"要睡
: 当系统侦测到Wakeup source之後才会回到AWAKE状态
: -------------------以上为目前做功课得知的知识
: 那我的问题如下:
: 何者为Wakeup source ???
: 当使用者按下电源键 = 触发Wakeup source ??
: 来电时会触发Wakeup source ???
: 使用者按下电源键会触发这完全可以理解
: 但是来电时也会唤醒手机
: 那不就代表着手机根本没有休眠吗...
: 因为接通电话的APP可能一直使用PARTIAL WAKE LOCK ??
: 想请教各位何种状态下,才算真正进入休眠
: 而那些讯号算是wakeup source呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 36.226.128.86
1F:→ LVE:非常感恩 谢谢大大的指教 02/22 01:07