3. 后台任务代码与配置准备
适用场景
本章节适用于需要在 Google Play 测试轨道中验证后台 WorkManager 任务是否正常调度的场景,包括:
- 应用需在后台上传日志、同步数据、定期拉取配置等;
- 任务需要系统容错和电量优化(WorkManager 自动管理);
- 必须在 minSdkVersion ≥ 14 的 Android 设备上运行(WorkManager 1.0+ 支持最低版本);
- 需要同时接入 Google Play 内部测试、封闭测试或开放测试轨道进行后台任务验证。
前置条件
- 已完成第 2 章“测试轨道创建与渠道配置”;
- Android Studio 已安装,项目 Gradle 构建通过;
- minSdkVersion 已明确(推荐 ≥ 21,WorkManager 2.7+ 最低 14);
- 目标设备或模拟器已登录 Google 账号并加入对应测试轨道。
操作步骤
- 在 app/build.gradle 中添加 WorkManager 依赖
dependencies { // 使用稳定版本 2.8.x 或以上 def work_version = "2.8.1" implementation "androidx.work:work-runtime-ktx:$work_version" // 可选:用于测试的 artifact androidTestImplementation "androidx.work:work-testing:$work_version" } - 配置必要的权限(仅当任务需要)
在 AndroidManifest.xml 中添加(若任务需在设备启动后重新调度):
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- Android 13+ --> - 确保 minSdkVersion 兼容
在 app/build.gradle 的 defaultConfig 中检查或修改:
defaultConfig { minSdkVersion 21 // 推荐 21 以上,WorkManager 2.7+ 支持 14,但为了安全建议 21+ ... } - 创建自定义 Worker 类
class DataSyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) { override fun doWork(): Result { // 执行后台任务逻辑 try { // 模拟网络同步 Log.d("WorkManager", "Data sync started") Thread.sleep(2000) // 实际逻辑 return Result.success() } catch (e: Exception) { return Result.retry() } } } - 调度一次性或周期性任务
val workRequest = OneTimeWorkRequestBuilder<DataSyncWorker>() .setConstraints( Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .build() ) .build() WorkManager.getInstance(context).enqueue(workRequest) - 验证配置完整性
运行一次单元测试或启动应用触发任务,检查 Logcat 中 WorkManager 日志。
输入输出物
| 类型 | 输入物 | 输出物 |
|---|---|---|
| 代码文件 | app/build.gradle(无 WorkManager 依赖) | app/build.gradle(已添加依赖) |
| 清单文件 | AndroidManifest.xml(无权限) | AndroidManifest.xml(含 RECEIVE_BOOT_COMPLETED 等) |
| Worker 类 | 无 | DataSyncWorker.kt(或对应文件名) |
| 调度代码 | 无 | MainActivity.kt 或 Application 类中 enqueue 调用 |
| Gradle 同步结果 | Gradle 解析前 | 构建成功,无依赖冲突 |
责任边界
- Android 开发工程师:完成所有代码修改、权限声明、Gradle 依赖添加,并确保 minSdkVersion 兼容;
- 测试工程师:在测试轨道设备上安装 APK/AAB,触发后台任务并验证执行日志;
- QA 负责人:审查权限必要性和 Worker 实现是否符合业务需求;
- 项目经理:确认 minSdkVersion 变动是否影响目标用户覆盖率。
记录材料
- app/build.gradle 依赖变更记录(含版本号);
- AndroidManifest.xml 权限变更对比;
- Worker 类代码审查记录;
- 构建日志(无依赖冲突、编译成功);
- 测试轨道设备列表及对应系统版本。
异常处理
| 异常现象 | 可能原因 | 解决方法 |
|---|---|---|
| Gradle 同步失败:Could not find artifact | 依赖版本号错误或 maven 仓库未添加 | 检查版本号,并在 settings.gradle 中确认 google() 和 mavenCentral() |
| 运行时报错:SecurityException | 缺少 RECEIVE_BOOT_COMPLETED 权限 | 在 AndroidManifest.xml 中补全权限 |
| WorkManager 任务始终不执行 | 设备处于低电量模式或 doze 状态 | 使用 adb 模拟:adb shell dumpsys deviceidle disable,或降低间隔时间 |
| minSdkVersion 冲突 | WorkManager 版本要求高于当前 minSdkVersion | 提升 minSdkVersion 或降级 WorkManager 版本(注意功能损失) |
验收标准
- Gradle 构建成功,无依赖冲突或版本警告;
- 在 minSdkVersion 兼容的最小 API 级别设备上可安装运行;
- WorkManager 任务按照约束条件(网络连接)正确调度并在 Logcat 输出执行日志;
- AndroidManifest.xml 中声明的权限均为必要权限,无冗余;
- APK/AAB 生成后上传至对应 Google Play 测试轨道并通过内部测试安装。
提示:若 minSdkVersion 低于 21,WorkManager 会使用 AlarmManager + BroadcastReceiver 作为回退方案。建议统一使用 21 以上以避免碎片化测试。
警告:不要在 Application 的 onCreate 中直接 enqueue 大量 WorkRequest,优先在用户首次交互或应用启动后延迟调度,避免启动耗时过长被系统杀进程。