HarmonyOS 鸿蒙Next TaskPool任务池 鸿蒙场景化代码
HarmonyOS 鸿蒙Next TaskPool任务池 鸿蒙场景化代码
<markdown _ngcontent-tss-c147="" class="markdownPreContainer">
多线程并发编程实践-IM场景
介绍
TaskPool和Worker均支持多线程并发能力。由于TaskPool的工作线程会绑定系统的调度优先级,并且支持负载均衡(自动扩缩容),而Worker需要开发者自行创建,存在创建耗时以及不支持设置调度优先级,故在性能方面使用TaskPool会优于Worker,因此大多数场景推荐使用TaskPool。
TaskPool偏向独立任务维度,该任务在线程中执行,无需关注线程的生命周期,超长任务(大于3分钟)会被系统自动回收;而Worker偏向线程的维度,支持长时间占据线程执行,需要主动管理线程生命周期。
使用说明
- 进入应用会看到消息列表,消息实时刷新。
- 点击任一消息进入对话框,点击下载按钮可将文件下载保存到本地。
实现思路
消息列表实时刷新
进入应用首页后,在aboutToAppear生命周期函数中启动worker线程。将子线程worker任务放在thread har包中,导出worker子线程的示例,在业务侧直接引用,实现消息列表的实时刷新。核心代码如下,源码参考
Index.ets
aboutToAppear(): void { //开启子线程任务,传递参数由业务自定义
workerInstance.postMessage({ type: true, context: this.context }) //接收子线程发送来的数据,业务自定义
workerInstance.onmessage = (e) => {
let newMessage: string = e.data.toString();
console.info("page received message:" + newMessage)
if (!this.messageArr.includes(newMessage)) {
this.messageArr.unshift(newMessage);
}
console.info("page received message:" + JSON.stringify(this.messageArr))
}
}
文件下载保存到本地
选择任一消息点进聊天框会展示图片,点击下载可将文件保存到本地,此处采用taskPool执行,注册下载任务到taskPool线程内执行。
工程结构&模块类型
entry/src/main/ets/ //har包
|---entryability
| |---EntryAbility.ets //程序入口类
|---pages
| |---Index.ets // 首页消息列表页
| |---MessageDetail.ets // 对话框页面下载文件
| |---BaseUsage.ets // 基本用法
| |---SendableTest.ets // 基本用法
thread/src/main/ets/ //har包
|---components
| |---task
| | |---ThreadTask //业务代码
| |---util
| | |---WorkerUtil //worker实例
|---workers
| |---NewMessageObserveWorker.ets //worker线程
参考资料
</markdown>更多关于HarmonyOS 鸿蒙Next TaskPool任务池 鸿蒙场景化代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next TaskPool任务池 鸿蒙场景化代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙系统中,Next TaskPool任务池是一个用于高效管理并发任务的机制。它通过预先分配和回收任务资源,降低了任务创建和销毁的开销,提升了系统的并发处理能力。
鸿蒙场景化代码是基于特定场景优化过的代码实现,旨在提高代码的可读性、可维护性和执行效率。在利用Next TaskPool任务池时,开发者可以编写场景化代码,将任务逻辑封装成可复用的任务单元,然后提交给任务池进行调度和执行。
具体来说,开发者需要定义任务单元(Task Unit),每个任务单元包含要执行的具体操作。接着,将这些任务单元提交给Next TaskPool进行管理。任务池会根据系统的当前负载和任务的优先级,智能地调度这些任务进行执行。
在鸿蒙系统中,Next TaskPool任务池还支持任务的动态扩展和缩减,以适应不同的并发需求。当系统负载较高时,任务池可以自动增加任务单元的数量,以提高并发处理能力;当系统负载降低时,任务池则可以回收部分任务单元,以节省系统资源。
需要注意的是,正确使用Next TaskPool任务池需要开发者对鸿蒙系统的并发模型和任务调度机制有深入的理解。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html