选择合适的 API 以使设备保持唤醒状态

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

所采用的方法取决于应用的需求。但是,一般而言,您应该使用尽可能轻量的方法,以便最大限度减少应用对系统资源的影响。本文档可帮助您根据自己的情况选择合适的 Android 技术。

选择合适的技术

让设备保持唤醒状态的最佳方式取决于应用的需求。本部分可帮助您选择合适的方法。

流程图:总结了如何选择合适的方法来保持设备唤醒状态。以下文字将详细说明流程图的内容。

  • 您的应用是否需要保持屏幕开启?
    • 如果选择,请参阅保持屏幕常亮。可能存在可满足您需求的专用 API;例如,如果您要实现电话通话界面,可以使用 Android 通讯框架,该框架会在需要时保持屏幕开启。如果没有适合您情况的专用 API,您可以使用 keepScreenOn API。
  • 您的应用是否正在运行前台服务,并且您需要在服务运行时保持设备在屏幕关闭时处于唤醒状态?
    • 如果为,则无需保持设备唤醒状态。如果用户正在积极与应用互动,设备将保持唤醒状态。如果用户未与您的应用互动,并且您未运行前台服务,则应在必要时让设备进入挂起模式。如果您只是需要确保在用户离开应用时完成某些工作,请参阅后台任务文档,找到最佳方案。
    • 如果为,请先确认您是否确实需要使用前台服务。根据您的具体情况,您可以使用一些专用 API 来满足您的需求,而无需使用前台服务。您可以在前台服务文档中找到相关信息。例如,如果您需要跟踪用户的位置,或许可以使用地理围栏 API 而不是 location 前台服务。
  • 如果设备在前台服务运行且设备屏幕处于关闭状态时暂停,是否会损害用户体验?(例如,如果您使用前台服务来更新通知,那么在设备处于暂停状态时,用户体验不会很差。)
    • 如果为,请勿使用唤醒锁定。当用户与设备互动时,设备会退出暂停状态,并自动恢复该操作。
    • 如果为,您可能需要使用唤醒锁定。不过,您仍应检查是否已在使用 API 或执行代表您声明唤醒锁的操作,如使设备保持唤醒状态的操作中所述。

使设备保持唤醒状态的操作

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

  • 如果您正在播放音频,音频系统会为您设置并管理唤醒锁定;您无需自行操作。
  • 如果您使用的是任务调度 API 或库(例如 WorkManagerJobSchedulerDownloadManager),系统或库会获取归因于您应用的唤醒锁定。
  • 如果您使用的是 Media3 ExoPlayer,则可以使用 ExoPlayer.setWakeMode() 让播放器为您设置唤醒锁定。
  • 某些设备传感器是唤醒传感器;您可以使用 SensorManager 让这些传感器在有数据要报告时唤醒设备。如需检查传感器是否为唤醒传感器,请调用 Sensor.isWakeUpSensor
  • 如果您安排闹钟,即使应用未运行,设备也会在闹钟响铃时唤醒。

另请参阅