选择正确的 API 以保持设备唤醒

当用户将其 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

另请参阅