在前面的系列中,我们已经把一个 HarmonyOS 应用从 0 一路做到:
-
UI + 状态管理
-
网络与缓存
-
登录与路由
-
权限与系统能力
但还有一个真正拉开"玩具 App"和"商业 App"差距的能力:
应用不在前台,也能持续、可靠地工作
这正是本篇要解决的问题。
一、为什么你一定会用到后台任务?
现实业务中,经常会遇到这些需求:
-
定时同步数据
-
上传日志 / 埋点
-
后台下载文件
-
长时间计算(加密、解析、压缩)
-
避免主线程卡顿
如果你还在:
❌ 所有逻辑都写在 UI 线程
❌ 页面一销毁任务就停
❌ setTimeout / setInterval 硬顶
那应用迟早会崩、卡、耗电、被系统杀掉。
二、HarmonyOS 的"后台能力体系"全景图
HarmonyOS 并不是只有一个后台方案,而是分层设计:
┌──────────────┐
│ UI 主线程 │ ← 页面、组件
└──────┬───────┘
│
┌──────▼───────┐
│ Worker │ ← 计算、IO
└──────┬───────┘
│
┌──────▼───────┐
│ 后台任务 │ ← 定时、延迟
└──────┬───────┘
│
┌──────▼───────┐
│ 系统调度 │ ← 省电、限频
└──────────────┘
核心思想:把"干活"和"展示"彻底分开
三、Worker:最常用、最安全的后台方案
1️⃣ 什么是 Worker?
Worker 是:
-
独立线程
-
不阻塞 UI
-
可与主线程通信
-
适合:计算、解析、批量处理
📌 类似 Web Worker,但更偏系统级
2️⃣ 创建一个 Worker
worker.ts
import worker from '@ohos.worker'
const workerPort = worker.workerPort
workerPort.onmessage = (e) => {
const result = heavyCalculate(e.data)
workerPort.postMessage(result)
}
function heavyCalculate(data: number[]) {
return data.reduce((a, b) => a + b, 0)
}
3️⃣ 主线程调用 Worker
const myWorker = new worker.ThreadWorker('entry/ets/workers/worker.ts')
myWorker.postMessage([1, 2, 3, 4])
myWorker.onmessage = (e) => {
console.log('计算结果', e.data)
}
📌 UI 永远不会卡
📌 计算逻辑彻底解耦
四、典型场景:列表数据预处理
假设你从网络拿到 1 万条数据:
❌ 在页面中直接 map / sort
✔ 在 Worker 中处理后再返回
workerPort.onmessage = (list) => {
const sorted = list.sort((a, b) => b.score - a.score)
workerPort.postMessage(sorted)
}
📌 这是性能优化的"分水岭"
五、后台任务(Background Task)是什么?
Worker 解决的是 "不阻塞 UI"
后台任务解决的是 "页面不在也要干"
常见后台任务类型
| 类型 | 用途 |
|---|---|
| 延迟任务 | 稍后执行 |
| 定时任务 | 周期同步 |
| 短时任务 | 上传、清理 |
| 条件任务 | 网络 / 充电 |
📌 HarmonyOS 会统一调度,控制耗电
六、后台任务实战:定时同步数据
1️⃣ 声明权限
"requestPermissions": [
{
"name": "ohos.permission.RUN_BACKGROUND_TASK"
}
]
2️⃣ 创建后台任务
import backgroundTask from '@ohos.backgroundTaskManager'
backgroundTask.requestBackgroundRunning((err) => {
if (!err) {
console.log('后台任务启动成功')
}
})
3️⃣ 执行业务逻辑
setTimeout(() => {
syncData()
backgroundTask.cancelBackgroundRunning()
}, 5000)
📌 用完就停,避免被系统限制
七、Worker + 后台任务 = 工程级方案
示例:后台同步 + Worker 处理
后台任务
↓
Worker 拉取 & 计算
↓
本地缓存
📌 页面不在,也能完成任务
📌 页面回来直接用缓存
八、任务调度的正确认知(非常重要)
HarmonyOS 并不鼓励:
❌ 无限后台
❌ 常驻任务
❌ 私自保活
而是强调:
✔ 场景触发
✔ 用完即停
✔ 系统统一调度
📌 这是通过审核、上架的关键
九、你现在可以写哪些"高级功能"了?
到第八篇为止,你已经可以独立实现:
-
后台数据同步
-
无卡顿复杂计算
-
批量日志上传
-
后台缓存预热
-
大列表预处理
-
合规的后台任务
这已经是:
真正"商用级 HarmonyOS 应用"的能力边界
十、整个 HarmonyOS 实战系列总结
| 篇章 | 能力 |
|---|---|
| 一~二 | 基础 + 网络 |
| 三 | 性能意识 |
| 四 | 全局状态 |
| 五 | 架构 |
| 六 | 表单体系 |
| 七 | 系统能力 |
| 八 | 后台与调度 |
你已经完成了一条完整、稀缺、含金量极高的学习路径。
最后的话
会写页面的人很多,会写"系统"的人很少。
而现在,你已经站在后者的门口了。