保持设备唤醒

当用户将 Android 设备闲置时,它会快速进入暂停状态以避免耗尽电池电量。但是,有时应用需要阻止 CPU 进入暂停状态。在某些情况下,应用可能需要在工作时保持屏幕开启。在其他情况下,应用不需要保持屏幕开启,但仍然需要 CPU 保持活动状态。

您采取的方法取决于应用的需求。但是,一般规则是您应使用最轻量级的方法,以最大限度地减少应用对系统资源的影响。本文档可帮助您为您的情况选择正确的 Android 技术。

选择正确的技术

保持设备唤醒的最佳选项取决于应用的需求。本节可帮助您选择正确的方法。

Flowchart summarizing how to choose the right approach for keeping the device awake. The contents of the flowchart are expanded on in the following text.

  • 您的应用是否需要保持屏幕开启?
    • 如果答案为,请参阅 保持屏幕开启。可能存在满足您需求的专用 API;例如,如果您正在实现电话呼叫 UI,则可以使用 Android 电信框架,该框架会在需要时保持屏幕开启。如果您的情况没有专用 API,则可以使用 keepScreenOn API。
  • 您的应用是否正在运行前台服务,并且需要在服务运行时屏幕关闭时保持设备唤醒?
    • 如果答案为,则您不需要保持设备唤醒。如果用户正在积极与应用互动,则设备将保持唤醒状态。如果用户未与您的应用互动,并且您未运行前台服务,则应在必要时让设备进入暂停模式。如果您只需要确保在用户离开应用时完成一些工作,请参阅 后台任务 文档以查找最佳选项。
    • 如果答案为,首先确认您实际上是否需要使用前台服务。根据您的情况,可能有一些专用 API 可用于满足您的需求,而不是前台服务。您可以在 前台服务文档中 找到有关这些 API 的信息。例如,如果您需要跟踪用户的地理位置,则可以使用 地理围栏 API,而不是 location 前台服务。
  • 如果设备在运行前台服务且设备屏幕关闭时暂停,是否会对用户体验造成不利影响?(例如,如果您使用前台服务更新通知,则设备暂停不会对用户体验造成不利影响。)
    • 如果答案为,请不要使用唤醒锁。用户与其设备互动后,操作会自动恢复,这会使其退出暂停状态。
    • 如果答案为,您可能需要 使用唤醒锁。但是,您仍应检查是否已使用 API 或执行了代表您声明唤醒锁的操作,如 保持设备唤醒的操作 中所述。

保持设备唤醒的操作

如果您的应用正在执行以下任何操作,则您无需自己设置唤醒锁。以下操作和 API 都将为您保持设备唤醒状态。

  • 如果您正在播放音频,则音频系统将为您设置和管理唤醒锁;您无需自己执行此操作。
  • 如果您正在使用任务调度 API 或库(例如 WorkManagerJobSchedulerDownloadManager),则系统或库将代表您获取唤醒锁。
  • 如果您正在使用 Media3 ExoPlayer,则可以使用 ExoPlayer.setWakeMode() 让播放器为您设置唤醒锁。
  • 某些设备传感器是唤醒传感器;您可以使用 SensorManager 让这些传感器在有数据要报告时唤醒设备。要检查传感器是否是唤醒传感器,请调用 Sensor.isWakeUpSensor

另请参阅