概述
为有效降低设备耗电量、确保用户体验的流畅性,系统会对后台应用进行管控,包括进程挂起与进程终止。当应用处于音乐播放、地图导航等场景时,用户把应用退至后台、锁屏或切换应用等操作,应用将自动转入后台运行。为确保应用在后台期间功能仍能正常使用,系统提供了符合规范的后台任务机制。本篇文章介绍应用切后台各类常见的问题场景及对应解决方案,并通过分析应用短暂切换前后台和后台长时间运行两大应用场景的开发实践案例,指导开发者如何有效使用后台任务处理冻结场景,从而确保应用在前后台之间能够流畅切换。
应用后台规格建议
当前系统会对切换至后台的应用所使用的资源进行严格管控,具体措施包括进程挂起和进程终止。若此时没有进行后台处理,可能会导致应用程序的功能出现异常。具体的限制条件与建议可以查看官网指南和最佳实践文档。
- [后台硬件资源使用建议]、[后台硬件资源最佳实践]:后台进程CPU负载约束(长时任务、短时任务);应用退到后台无长时任务时使用蓝牙、网络资源、麦克风或者扬声器、GPS资源;退到后台禁止使用传感器。
- [后台软件资源使用建议]、[后台软件资源最佳实践]:后台合理使用上传下载、使用音频服务、使用定位导航服务、使用系统资源。
- [后台任务开发服务指南]:后台任务的功能介绍、资源使用约束、后台任务类型。
实现原理
后台任务类型
标准系统支持规范内受约束的后台任务,包括短时任务、长时任务、延迟任务、代理提醒和能效资源。开发者可以根据如下介绍,选择合适的[后台任务],以满足应用退至后台后继续运行的需求。
以下表格对比总结了各类后台任务的概念、适用场景以及任务执行过程中的应用状态。
适用场景 | 概念 | 常见问题 | 应用退至后台状态 | 任务类型 |
---|---|---|---|---|
不执行任何任务的后台场景。 | 不执行任何任务,直接退到后台。 | - | 一小段时间后应用挂起(几秒内)。 | 无后台 |
小文件下载、缓存、信息发送等时效性高、需要临时占用资源执行的任务。 | 实时性要求高、耗时不长的任务。 | 应用短暂切换前后台,进程被挂起。 | 在单次配额内,应用不会被挂起直到取消任务。单次配额超时不取消,应用进程会被终止。 | 短时任务 |
数据传输、音频播放、录音、定位导航、蓝牙、WLAN 相关、多设备互联、音视频通话、计算任务。 | 长时间运行在后台、用户可感知的任务。 | 应用后台长时间运行中断。 | 应用不会被挂起直到取消任务,任务结束不取消应用进程会被终止。 | 长时任务 |
软件更新、信息收集、数据处理等。 | 实时性要求不高、可延迟执行的任务,满足条件后放入执行队列,系统会根据内存、功耗等统一调度。 | - | 应用退到后台时挂起,满足任务设定条件时由系统统一调度拉起应用,创建 Extension 进程执行任务。单次回调最长运行 2 分钟,如果超时不取消,系统会终止对应的 Extension 进程。 | 延迟任务 |
闹钟、倒计时、日历。 | 系统代理应用做出相应提醒。 | - | 应用挂起或进程终止,满足条件后系统会代理应用做相应的提醒。 | 代理提醒 |
场景示例
应用短暂切换前后台,避免进程挂起
应用在进行小文件下载、缓存、信息发送等业务场景时,若将应用短暂退至后台导致应用进程被挂起,切回前台有可能造成应用异常的状态。此时可以申请短时任务作为此问题的解决方案。下面的示例使用ApplicationContext订阅应用前后台切换的回调,来实现应用切后台时申请短时任务,解决短暂切换前后台导致的应用发送消息异常。
- 定义短时任务信息Susp