当用户让 Android 设备处于空闲状态时,设备会快速进入暂停状态,以避免消耗电池电量。不过,有时应用需要阻止 CPU 进入挂起状态。在某些情况下,应用可能需要在工作时保持屏幕开启状态。在其他情况下,应用不需要屏幕保持开启状态,但仍需要 CPU 处于活动状态。
所采用的方法取决于应用的需求。但是,一般而言,您应该使用尽可能轻量的方法,以便最大限度减少应用对系统资源的影响。本文档可帮助您根据自己的情况选择合适的 Android 技术。
选择合适的技术
让设备保持唤醒状态的最佳方式取决于应用的需求。本部分可帮助您选择合适的方法。
- 您的应用是否需要保持屏幕开启?
- 如果选择是,请参阅保持屏幕常亮。可能存在可满足您需求的专用 API;例如,如果您要实现电话通话界面,可以使用 Android 通讯框架,该框架会在需要时保持屏幕开启。如果没有适合您情况的专用 API,您可以使用
keepScreenOn
API。
- 如果选择是,请参阅保持屏幕常亮。可能存在可满足您需求的专用 API;例如,如果您要实现电话通话界面,可以使用 Android 通讯框架,该框架会在需要时保持屏幕开启。如果没有适合您情况的专用 API,您可以使用
- 您的应用是否正在运行前台服务,并且您需要在服务运行时保持设备在屏幕关闭时处于唤醒状态?
- 如果设备在前台服务运行且设备屏幕处于关闭状态时暂停,是否会损害用户体验?(例如,如果您使用前台服务来更新通知,那么在设备处于暂停状态时,用户体验不会很差。)
- 如果为否,请勿使用唤醒锁定。当用户与设备互动时,设备会退出暂停状态,并自动恢复该操作。
- 如果为是,您可能需要使用唤醒锁定。不过,您仍应检查是否已在使用 API 或执行代表您声明唤醒锁的操作,如使设备保持唤醒状态的操作中所述。
使设备保持唤醒状态的操作
如果您的应用正在执行以下任何操作,则无需自行设置唤醒锁定。以下操作和 API 都会让设备保持唤醒状态。
- 如果您正在播放音频,音频系统会为您设置并管理唤醒锁定;您无需自行操作。
- 如果您使用的是任务调度 API 或库(例如 WorkManager、
JobScheduler
或DownloadManager
),系统或库会获取归因于您应用的唤醒锁定。 - 如果您使用的是 Media3 ExoPlayer,则可以使用
ExoPlayer.setWakeMode()
让播放器为您设置唤醒锁定。 - 某些设备传感器是唤醒传感器;您可以使用
SensorManager
让这些传感器在有数据要报告时唤醒设备。如需检查传感器是否为唤醒传感器,请调用Sensor.isWakeUpSensor
。 - 如果您安排闹钟,即使应用未运行,设备也会在闹钟响铃时唤醒。