当用户将其 Android 设备置于闲置状态时,设备会迅速进入挂起状态,以避免电池耗尽。然而,有时应用需要阻止 CPU 进入挂起状态。在某些情况下,应用可能需要在工作时保持屏幕开启。在其他情况下,应用不需要保持屏幕开启,但仍需要 CPU 保持活跃状态。
您采用的方法取决于您的应用需求。然而,一般规则是,您应尽可能使用最轻量级的方法,以最大限度地减少应用对系统资源的影响。本文档可帮助您为具体情况选择正确的 Android 技术。
选择正确的技术
保持设备唤醒的最佳选项取决于您的应用需求。本节可帮助您选择正确的方法。
- 您的应用需要保持屏幕开启吗?
- 如果是,请参阅保持屏幕开启。可能存在满足您需求的专用 API;例如,如果您正在实现电话通话 UI,则可以使用Android 电话框架,它会在需要时保持屏幕开启。如果您的特定情况没有专用 API,则可以使用
keepScreenOn
API。
- 如果是,请参阅保持屏幕开启。可能存在满足您需求的专用 API;例如,如果您正在实现电话通话 UI,则可以使用Android 电话框架,它会在需要时保持屏幕开启。如果您的特定情况没有专用 API,则可以使用
- 您的应用正在运行前台服务,并且您需要在服务运行时屏幕关闭时保持设备唤醒吗?
- 当前台服务正在运行且设备屏幕关闭时,如果设备挂起,这会对用户体验造成不利影响吗?(例如,如果您使用前台服务更新通知,则设备挂起不会对用户体验造成不良影响。)
保持设备唤醒的操作
如果您的应用正在执行以下任何操作,您无需自行设置唤醒锁。以下所有操作和 API 都会为您保持设备唤醒。
- 如果您正在播放音频,音频系统会为您设置和管理唤醒锁;您无需自行操作。
- 如果您正在使用任务调度 API 或库,例如 WorkManager、
JobScheduler
或DownloadManager
,系统或库会获取一个归属于您的应用的唤醒锁。 - 如果您正在使用 Media3 ExoPlayer,可以使用
ExoPlayer.setWakeMode()
让播放器为您设置唤醒锁。 - 某些设备传感器是唤醒传感器;您可以使用
SensorManager
让这些传感器在有数据需要报告时唤醒设备。要检查传感器是否为唤醒传感器,请调用Sensor.isWakeUpSensor
。