前言
WorkManager作为谷歌推出的架构组件之一,相比其他的组件,应用场景要少一些,不是每个APP都需要的。但是如果有后台任务需要执行,那么,它是一个不错的选择。
WorkManager是什么
WorkManager是一个针对后台任务处理的方案,无论在应用或设备重启的情况下都能可靠地帮助您的应该管理和执行延迟的后台任务,同时能兼容到Android 4.0以及以后的版本,能减轻适配工作。我们知道随着Android系统版本的升级,在电量优化方面做了一些处理,限制某些API的使用范围,如果我们单独开发组件来完成适配需要做很多版本的兼容处理。而WorkManager为我们的后台任务提供了一套统一的解决方案,它可以根据Android的电量优化和设备API等级选择合适的方式执行,同时向后兼容至API 14。因此它是我们执行后台任务的首选组件。
从以上描述中,明白WorkManager有以下特点:
- 保证执行(应用关闭或者设备重启)
- 运行延迟
- 根据系统API和电量优化做了兼容,减少适配工作
随着Android的不断发展,系统加强了对后台执行的优化和限制。为了开发出现代化的Android应用,我们需要学习如何通过最新方式来管理后台任务。
我们都在说后台任务,那么到底什么才是后台任务呢?下面通过前台应用来反向说明什么是后台任务。
Android系统如何定义前台应用
- 具有一个可见的Activity,不论该Activity处于started或者是paused状态
- 具有一个前台服务(类似音乐播放,会在系统的状态栏显示正在运行的图标)
- 另外的一个前台应用关联至该应用,不论是通过绑定到它的一个服务,还是通过使用内容提供程序。比如当别的前台应用或系统绑定了该应用的以下服务,那么该应用处于前台:
- 输入法
- 壁纸服务
- 通知监听器
- 语音或者文本服务
- 正在车内播放音乐的流媒体应用(只适用于Android Auto车载娱乐系统)
不满足以上条件,则成为后台应用,
后台执行的相关行为变更
在后台运行应用会消耗设备的有限资源,如内存或者电池电量,进而影响用户的使用体验。比如后台任务可能会缩短设备的续航时间,或者用户在玩游戏、看视频、或者拍照是造成系统卡顿。
为了改善续航表现和用户体验,Android在版本演进的过程中,针对后台进行了不同程度的限制,其中包括:
- 低耗电模式和应用待机模式:如果设备未插接电源,处于空闲状态一段时间且屏幕关闭,系统会进入低耗电或者待机模式,并对应用行为施加相应限制
- 后台位置限制: 对后台应用获取用户当前位置的频率进行限制;
- 后台服务限制: 限制应用在后台运行服务,并禁止应用通过隐藏/不可见方式调用 CPU 或网络资源;
- 近期新增特性及优化项: (1) 应用待机群组: 限制非活跃应用对设备资源的调用; (2) 后台限制: 当系统检测到应用出现不良行为时,系统会向用户询问是否要限制该应用在后台访问设备资源; (3) 省电助手功能优化。
使用案例及解决方案
在选用后台执行工具前,首先对应用需求和限制场景有个清晰的了解。
作为Android推荐的后台管理工具,WorkManager考虑了系统内的所有后台执行限制。如果您需要确保推迟的任务一定会被执行,请务必使用WorkManager。该API允许您调度任务(单次执行或者循环执行),总和任务和构构建任务链。还可以添加任务执行的约束条件,例如:当设备空闲或充电时才可以触发,或者当内容提供程序发生变更时才可以运行。
以上传日志为例,您需要依次创建以下两个工作请求,才可以将压缩后的日志文件上传至服务器:
- 第一步:压缩文件。在此步骤中,您可以添加约束条件 “当设备充电时,任务才可以被执行”。
- 第二步:向服务器上传文件。在创建此请求时,您应该添加 “需要联网”这一约束条件,指定任务仅在设备连接到有效网络时才会被触发。
将任务编入队列后,WorkManger会再约束条件满足的情况下,即当应用可以访问所需资源时,才执行这两个任务。
WorkManager的另一个优势在于它可以与Android的电量特性协同工作。假设某个任务的执行时间恰好落在低耗电模式时段内,那么WorkManager便会在维护窗口时段(如果此时约束条件已满足,或者设备暂时退出了低耗电模式),尝试运行该任务。
总结
合理的后台执行策略可以帮助您开发出卓越的应用,在打造完美用户体验的同时,为设备保驾 “续” 航。