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