1. 什么是手机睡眠(深度睡眠),在程序上有什么表现?
先从手机的CPU说起,大家知道我们的手机是有好几个CPU的,最重要的三个CPU是: (1)主CPU是跑Android系统; (2)Modem CPU跑电话协议; (3)WCNSS CPU跑我们WIFI协议。 手机的睡眠,指的就是主CPU停止执行指令进行手机省电。所以手机睡眠的时候,主CPU是不工作的,在程序上的表现就是Android系统的任何程序是不执行的!各种服务,Activity都是不会运行的。因为CPU都停了,没有指令的执行,所以没法运行。2. 打电话的时候怎么能用呢?
前面提到了。手机好几个CPU呢,主CPU停止的时候,Modem CPU没有停止,它一直在兢兢业业的工作呢。当电话来临的时候,Modem CPU会通过某种机制,唤醒睡眠中的主CPU。主CPU开始执行指令后,Android系统开始 从它睡眠时的程序部分继续开始执行。那么Android系统的各种服务开始运作,屏幕开始亮起,提醒用户,电话来了。
3. 睡眠是谁决定的?
睡眠的策略整体来说是由Framwork决定的。有没有在代码中见过“Wake Lock”?当在代码中获得 “Wake Lock”时,根据“Wake Lock”的类型,系统就可能无法进入睡眠了。“Wake Lock”就不展开了。
4. WIFI跟睡眠有关系吗?
有关系,WIFI是可以阻止系统进入睡眠的,比如你选择了始终保持WIFI连接,WIFI会获得“Wake Lock”,那么整个 系统是无法进入睡眠的。而你如果选择了在睡眠时,断开WIFI连接,则整个系统就可能可以进入深度睡眠了。
5. 睡眠一定是系统级别的吗?
睡眠不是系统的专利,各个器件也可以睡眠,比如LCD灭屏。只不过整个系统睡眠的话,更省电。
6. 系统如何判断能否睡眠呢?
这涉及到睡眠时的各个模块的投票策略。就是有一个模块不同意睡眠,系统就无法深度睡眠(主CPU停止运转)只有大家都投票同意了,系统才能深度睡眠。