相关问题
#鸿蒙通关秘籍#在鸿蒙API 13环境中Worker如何实现和宿主线程的即时消息通信?
50浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Worker对宿主线程接口的同步调用?
52浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中避免在主线程中执行耗时操作
78浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中如何使用TaskPool同时执行多个耗时任务?
73浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何避免在组件的属性刷新过程中执行耗时操作?
91浏览 • 1回复 待解决
TaskPool在任务执行过程中如何跟主线程进行通信?如何操作同一块内存变量
2066浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现独立执行的耗时任务?
70浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
407浏览 • 1回复 待解决
HarmonyOS taskPool执行的task内如何回调主线程的方法
532浏览 • 1回复 待解决
宿主线程如何向worker子线程发送消息?
354浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何获取拖拽过程中传递的数据?
77浏览 • 1回复 待解决
宿主线程如何接收子线程发送的消息?
398浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中启动组件时,后台应用有哪些限制?
84浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何执行创建的Task?
138浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙应用中如何使用UI主线程调用多线程方法?
56浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现鸿蒙API 13中EmbeddedUIExtensionAbility的生命周期管理?
44浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统测试过程中如何验证日志内容的输出?
103浏览 • 1回复 待解决
HarmonyOS taskpool.SequenceRunner执行task任务,在task中调用接口报错
433浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中使用Swiper实现循环播放功能?
59浏览 • 1回复 待解决
HarmonyOS axios组件,下载过程中没有执行onDownloadProgress的日志?
164浏览 • 0回复 待解决
#鸿蒙通关秘籍#主线程和Worker线程在线程模型中承担什么职责?
82浏览 • 1回复 待解决
#鸿蒙通关秘籍#线程模型中,主线程和TaskPool Worker线程有啥区别?
128浏览 • 1回复 待解决
HarmonyOS axios组件,下载过程中没有执行onDownloadProgress的日志
39浏览 • 1回复 待解决
#鸿蒙通关秘籍#适配过程中,有哪些常见的坑需要留心?
84浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何监控Task的执行状态?
187浏览 • 1回复 待解决
通过Task的
sendData
方法可以在任务执行过程中,实时通知宿主线程。首先在宿主线程中定义接收消息的方法:
bash // TaskSendDataUsage.ets function notice(data: number): void { console.info("子线程任务已执行完,共加载图片: ", data); }
在任务中使用
sendData
发送消息:bash // TaskSendDataUsage.ets import { taskpool } from '@kit.ArkTS'; import { IconItemSource } from './IconItemSource';
@Concurrent export function loadPictureSendData(count: number): IconItemSource[] { let iconItemSourceList: IconItemSource[] = []; for (let index = 0; index < count; index++) { const numStart: number = index * 6; iconItemSourceList.push(new IconItemSource('$media:startIcon',
item${numStart + 1}
)); iconItemSourceList.push(new IconItemSource('$media:background',item${numStart + 2}
)); iconItemSourceList.push(new IconItemSource('$media:foreground',item${numStart + 3}
)); iconItemSourceList.push(new IconItemSource('$media:startIcon',item${numStart + 4}
)); iconItemSourceList.push(new IconItemSource('$media:background',item${numStart + 5}
)); iconItemSourceList.push(new IconItemSource('$media:foreground',item${numStart + 6}
));} return iconItemSourceList; }
在主线程中注册接收消息:
bash // TaskSendDataUsage.ets @Entry @Component struct Index { @State message: string = 'Hello World';
build() { Row() { Column() { Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { let iconItemSourceList: IconItemSource[]; let lodePictureTask: taskpool.Task = new taskpool.Task(loadPictureSendData, 30); lodePictureTask.onReceiveData(notice); taskpool.execute(lodePictureTask).then((res: object) => { iconItemSourceList = res as IconItemSource[]; }) }) } .width('100%') } .height('100%') } }