1.1 演进路线概览
Android 任务队列从早期简单解决方案发展到现代健壮框架,经历了数十个 API 等级的迭代。本章以全景图展示核心方案的生命周期、弃用节点与官方推荐替代路径,为后续章节的深入对比奠定基础。
核心任务队列对比
| 方案 | 引入 API | 弃用状态 | 推荐替代方案 |
|---|---|---|---|
| AsyncTask | API 1 | API 30 已弃用 | WorkManager / Kotlin Coroutines |
| HandlerThread | API 1 | 未弃用,但已过时 | CoroutineScope + Dispatchers.IO |
| IntentService | API 3 | API 30 已弃用 | WorkManager / JobIntentService (兼容) |
| JobScheduler | API 21 | 未弃用,但建议迁移 | WorkManager(统一调度) |
| WorkManager | API 14+ | 官方推荐 | —(自身为现代标准) |
| Kotlin Coroutines | 独立库 | 官方推荐 | —(可与 WorkManager 结合) |
| RxJava | 独立库 | 社区维护 | Kotlin Coroutines(逐步迁移) |
✏️ 弃用追踪建议
每当引入新依赖或修改旧代码,执行
每当引入新依赖或修改旧代码,执行
./gradlew lint 或 Android Studio 的 Lint 检查:// 检查 AsyncTask 使用情况
lintOptions {
abortOnError false
check 'ObsoleteSdkInt'
}
Lint 会报告所有使用已弃用 API 的位置,并建议替代方案。
典型代码迁移示例
以下对比展示同一个“下载并保存文件”任务在 AsyncTask 与 WorkManager 中的实现差异:
// 旧方式:AsyncTask(API 30 弃用)
private class DownloadTask extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... url) {
// 执行耗I/O操作
return true;
}
}
new DownloadTask().execute("https://example.com/file");
// 新方式:WorkManager(官方推荐)
class DownloadWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
val url = inputData.getString("url") ?: return Result.failure()
// 执行耗I/O操作
return Result.success()
}
}
val request = OneTimeWorkRequestBuilder<DownloadWorker>()
.setInputData(workDataOf("url" to "https://example.com/file"))
.build()
WorkManager.getInstance(context).enqueue(request)
⚠️ 关键警告
- 不要在 Android 11 (API 30) 以上的设备上继续使用 AsyncTask,Google 已停止维护并可能在未来版本移除。
- JobScheduler 在低端设备上存在调度对齐问题,WorkManager 自动处理了这些兼容性差异。
IntentService虽在 API 30 标记弃用,但JobIntentService可作为过渡方案直到迁移完成。