Android设备是如何进入休眠的呢?

发布于:2025-03-11 ⋅ 阅读:(14) ⋅ 点赞:(0)

首先我们手机灭屏后,一般需要等一段时间CPU才真正进入休眠。即Android设备屏幕暗下来的时候,并不是立即就进入了休眠模式;当所有唤醒源都处于de-avtive状态后,系统才会进入休眠。在手机功耗中从灭屏开始到CPU进入休眠时间越短,则待机场景越省电。

Android设备是如何进入休眠的呢?

    答:Android提出了“Opportunistic suspend”的理论,通俗的讲,就是“逮到机会就睡”,“Opportunistic suspend”思想是非常简单的,只要检测到系统没有事情在做(逮到机会),就suspend整个系统。这对系统的开发人员(特别是driver开发者)来说,很容易实现,几乎不需要特别处理。但困难的是,“系统没有事情在做”的判断依据是什么?能判断准确吗?会不会浪费过多的资源在"susend->resume-supsend…”的无聊动作上?如果只有一个设备在做事情,其它设备岂不是也得陪着耗电?等等…

0

Android设备进入休眠的流程:

1.用户按下电源键:

    用户通过按下电源键触发设备的休眠流程。

2.息屏超时:

    设备屏幕在设定的时间内无操作后自动进入休眠状态。

3.AMS(Activity Manager Service)处理:

    AMS负责管理Activity和Service的生命周期,调用它们的onPause和onStop方法,确保应用在休眠前保存数据。

4.应用保存数据:

    应用在进入休眠前保存当前状态和数据,以防止数据丢失。

5.检查是否存在持锁:

    系统检查是否存在阻止设备进入休眠的锁(如唤醒锁)。

6.执行Early Suspend流程:

    如果不存在持锁,系统开始执行早期挂起流程。

6.1关闭背光:首先关闭屏幕背光以降低功耗。

6.2停止扫描触摸:停止触摸屏的扫描功能,进一步减少功耗。

6.3 关闭摄像头等硬件模块

即提前关闭摄像头等高耗电硬件模块,以更快降低功耗。

7.关闭屏幕:

    完全关闭屏幕显示。

8.停止传感器:

    WiFi和BT低功耗模式:停止传感器的工作,并将WiFi和BT模块置于低功耗模式。

9.内核层处理:

9.1同步文件系统:

    调用sys_sync,将缓存数据写入磁盘,确保数据不丢失。

9.2挂起设备:

    遍历设备,调用suspend方法,将设备置于低功耗状态。

9.3进入STR(Suspend to RAM):

    CPU进入低功耗状态,关闭大部分硬件,只保留必要的唤醒源(如按键、网络和RTC闹钟)。

10.CPU进入低功耗状态:

    设备最终进入低功耗休眠状态,等待用户下一次唤醒。

Android休眠框架图

在Android自动休眠(Auto Sleep)机制涉及两个关键概念:Early Suspend 和 WakeLock。这两个机制共同管理设备的电源状态,以优化功耗和性能。

0

Early Suspend(预挂起机制)

    Early Suspend 是Android电源管理中的一个机制,用于在设备进入完全休眠状态之前,提前关闭一些高耗电的硬件模块。这样可以更快地降低功耗,延长电池寿命。

1.触发条件:

    当系统检测到用户按下电源键或屏幕超时,且没有应用持有唤醒锁(WakeLock)时,Early Suspend机制会被触发。

2.执行步骤:

2.1关闭背光:首先关闭屏幕背光,以减少功耗。

2.2停止触摸屏扫描:停止触摸屏的扫描功能,进一步降低功耗。

2.3关闭摄像头等硬件模块:提前关闭摄像头、USB等高耗电硬件模块。

3.目的:通过提前关闭这些硬件模块,系统可以更快地进入低功耗状态,而不需要等待所有设备都进入休眠状态。

WakeLock(唤醒锁机制)

    WakeLock 是Android系统中用于防止设备进入休眠状态的机制。应用可以通过申请WakeLock来保持设备处于唤醒状态,以执行一些后台任务或保持屏幕常亮。

1.申请与释放:

1.1申请WakeLock:应用可以通过PowerManager申请WakeLock,以保持设备唤醒。

1.2释放WakeLock:当任务完成后,应用需要释放WakeLock,以允许设备进入休眠状态。

2.类型:

2.1阻止CPU进入suspend的WakeLock:保持CPU运行,但允许屏幕关闭。

2.2屏幕WakeLock:保持屏幕亮起,但允许CPU进入休眠。

3.管理:

3.1PowerManagerService:负责管理所有WakeLock的申请和释放。

3.2WakeLock Manager:在内核层管理WakeLock的状态,确保设备在适当的时候进入休眠。

协同工作

    Early Suspend和 WakeLock 机制协同工作,以确保设备在不需要时进入低功耗状态,同时在需要时保持唤醒。

    1.当所有WakeLock被释放时,系统会继续执行休眠流程,包括Early     Suspend和最终的Linux Suspend。

    2.如果存在任何WakeLock,系统将延迟进入休眠状态,直到所有WakeLock被释放。

    通过这两个机制,Android系统能够在保证用户体验的同时,有效地管理设备的电源状态,延长电池寿命。