鸿蒙中worker开发相对于taskpool要繁琐一些:其中有两个路径需要配置:
1. build-profile.json5 中 workers 字段的路径
如果是手动创建 worker 文件,需要在:
entry/build-profile.json5
"buildOption": { "sourceOption": { "workers": [ "./src/main/ets/workers/SumWorker.ets" ] } },
否则:能编译,但运行时可能找不到 worker,或者不会被打包
2、new worker.ThreadWorker(...) 运行时构造参数的路径
假设:entry/src/main/ets/workers/FileWorker.ets
那么:
import { worker } from '@kit.ArkTS'const fileWorker = new worker.ThreadWorker( 'entry/ets/workers/FileWorker.ets')
注意:这里不是:
模块名/ets/相对路径
entry/ets/workers/FileWorker.ets
3、路径规则本质
规则其实是:
{moduleName}/ets/{relativePath}
其中:
moduleName = entry
relativePath = workers/FileWorker.ets
所以:
entry/ets/workers/FileWorker.ets
4、HAR / HSP 的特殊写法
HSP
new worker.ThreadWorker( 'hsp/ets/workers/TestWorker.ets')
HAR
有两种:
@方式
new worker.ThreadWorker( '@har/ets/workers/TestWorker.ets')
2. 相对路径方式
new worker.ThreadWorker( '../../workers/TestWorker.ets')
5、最容易踩坑的问题
1、路径写成相对路径
new ThreadWorker('./workers/TestWorker.ets')
2、worker 不在 ets 下
必须在:
下面。
6、官方推荐方式(最省事)
直接创建worker
DevEco 会自动:
这是最稳的。