当用户让 Android 设备处于空闲状态时,设备会快速进入暂停状态,以避免耗尽电池电量。不过,有时应用需要阻止 CPU 进入暂停状态。在某些情况下,应用在运行时可能需要让屏幕保持开启状态。在其他情况下,应用不需要让屏幕保持开启状态,但仍需要 CPU 处于活动状态。
所采用的方法取决于应用的需求。但是,一般而言,您应该使用尽可能轻量的方法,以便最大限度减少应用对系统资源的影响。本文档可帮助您根据自己的情况选择正确的 Android 技术。
选择合适的技术
最适合让设备保持唤醒状态的选项取决于应用的需求。本部分可帮助您选择合适的方法。
- 您的应用是否需要保持屏幕开启状态?
- 如果回答为是,请参阅让屏幕保持常亮。可能有专用 API 可满足您的需求;例如,如果您要实现通话界面,可以使用 Android 通讯框架,该框架可在需要时让屏幕保持开启状态。如果没有适合您情况的专用 API,您可以使用
keepScreenOn
API。
- 如果回答为是,请参阅让屏幕保持常亮。可能有专用 API 可满足您的需求;例如,如果您要实现通话界面,可以使用 Android 通讯框架,该框架可在需要时让屏幕保持开启状态。如果没有适合您情况的专用 API,您可以使用
- 您的应用是否正在运行前台服务,并且您需要在服务运行时在屏幕关闭时让设备保持唤醒状态?
- 如果为 No,则无需让设备保持唤醒状态。如果用户正在积极与应用互动,设备将保持唤醒状态。如果用户未与您的应用互动,并且您未运行前台服务,则应在必要时让设备进入暂停模式。如果您只需要确保在用户离开应用时完成一些工作,请参阅后台任务文档,找到最佳选项。
- 如果回答是是,请先确认您是否确实需要使用前台服务。根据具体情况,您可能可以使用一些专用 API 来满足您的需求,而无需使用前台服务。如需了解这些限制,请参阅“前台服务”文档。例如,如果您需要跟踪用户的位置信息,则可以使用 geofencing API 而非
location
前台服务。
- 如果在前台服务运行且设备屏幕关闭时设备进入暂停状态,会对用户体验有害吗?(例如,如果您使用前台服务更新通知,即使设备处于暂停状态,也不会给用户带来糟糕的体验。)
- 如果为否,请勿使用唤醒锁。当用户与设备互动时,操作会自动恢复,从而使设备退出暂停状态。
- 如果为是,您可能需要使用唤醒锁定。不过,您仍应检查自己是否已在使用 API 或执行代表您声明唤醒锁的操作,如使设备保持唤醒状态的操作中所述。
使设备保持唤醒状态的操作
如果您的应用执行以下任何操作,您无需自行设置唤醒锁定。以下操作和 API 都会让设备保持唤醒状态。
- 如果您正在播放音频,音频系统会为您设置和管理唤醒锁定;您无需自行执行此操作。
- 如果您使用的是任务调度 API 或库(例如 WorkManager、
JobScheduler
或DownloadManager
),系统或库会代表您获取唤醒锁。 - 如果您使用的是 Media3 ExoPlayer,则可以使用
ExoPlayer.setWakeMode()
让播放器为您设置唤醒锁定。 - 某些设备传感器是唤醒传感器;您可以使用
SensorManager
让这些传感器在有数据要报告时唤醒设备。如需检查传感器是否为唤醒传感器,请调用Sensor.isWakeUpSensor
。