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

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

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

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

注意: 您可能熟悉唤醒锁定。应用可以设置唤醒锁定,以防止设备进入暂停状态。不过,使用唤醒锁定功能可能会快速耗尽设备电池电量。只有在没有其他选项可以满足您的需求时,才应使用唤醒锁定。如果您确实要使用唤醒锁定,则应尽快释放它。

选择合适的技术

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

您的应用是否需要保持屏幕开启?

如果选择是,请参阅保持屏幕常亮。可能存在可满足您需求的专用 API;例如,如果您要实现电话通话界面,可以使用 Android 通讯框架,该框架会在需要时保持屏幕开启。如果没有适合您情况的专用 API,您可以使用 keepScreenOn API。

您的应用是否正在运行前台服务,并且您需要在服务运行时保持设备在屏幕关闭时处于唤醒状态?

如果为否,则无需保持设备唤醒状态。如果用户正在积极与应用互动,设备将保持唤醒状态。如果用户未与您的应用互动,并且您未运行前台服务,则应在必要时让设备进入挂起模式。如果您只是需要确保在用户离开应用时完成某些工作,请参阅后台任务文档,找到最佳方案。

如果为是,请先确认您是否确实需要使用前台服务。根据您的具体情况,您可以使用一些专用 API 来满足您的需求,而无需使用前台服务。您可以在前台服务文档中找到相关信息。例如,如果您需要跟踪用户的位置,或许可以使用地理围栏 API 而不是 location 前台服务。

如果设备在前台服务运行且设备屏幕处于关闭状态时暂停,是否会损害用户体验?(例如,如果您使用前台服务来更新通知,那么在设备处于暂停状态时,用户体验不会很差。)

如果为否,请勿使用唤醒锁定。当用户与设备互动时,设备会退出暂停状态,并自动恢复该操作。

如果为是,您可能需要使用唤醒锁定。不过,您仍应检查是否已在使用 API 或执行代表您声明唤醒锁的操作,如使设备保持唤醒状态的操作中所述。

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

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

如果您正在播放音频,音频系统会为您设置并管理唤醒锁定;您无需自行操作。

如果您使用的是任务调度 API 或库(例如 WorkManager、JobScheduler 或 DownloadManager),系统或库会获取归因于您应用的唤醒锁定。

如果您使用的是 Media3 ExoPlayer,则可以使用 ExoPlayer.setWakeMode() 让播放器为您设置唤醒锁定。

某些设备传感器是唤醒传感器;您可以使用 SensorManager 让这些传感器在有数据要报告时唤醒设备。如需检查传感器是否为唤醒传感器,请调用 Sensor.isWakeUpSensor。

如果您安排闹钟,即使应用未运行,设备也会在闹钟响铃时唤醒。

另请参阅

使用唤醒锁定

使屏幕保持开启状态

相关推荐