相关问题
#鸿蒙通关秘籍#在鸿蒙API 13环境中Worker如何实现和宿主线程的即时消息通信?
724浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Worker对宿主线程接口的同步调用?
925浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中避免在主线程中执行耗时操作
1205浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中如何使用TaskPool同时执行多个耗时任务?
730浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何避免在组件的属性刷新过程中执行耗时操作?
947浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现独立执行的耗时任务?
939浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙应用中如何使用UI主线程调用多线程方法?
1001浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙开发中如何为RN框架优化线程执行?
861浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中启动组件时,后台应用有哪些限制?
1037浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现鸿蒙API 13中EmbeddedUIExtensionAbility的生命周期管理?
1198浏览 • 1回复 待解决
TaskPool在任务执行过程中如何跟主线程进行通信?如何操作同一块内存变量
2847浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统中如何管理文件选择过程中得到的URI?
958浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何获取拖拽过程中传递的数据?
904浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何在鸿蒙应用开发中避免在主线程执行耗时网络请求以提高UI流畅度?
722浏览 • 0回复 待解决
#鸿蒙通关秘籍# 如何执行创建的Task?
969浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中使用Swiper实现循环播放功能?
864浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Swiper组件的自动播放功能?
904浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
1197浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统测试过程中如何验证日志内容的输出?
1045浏览 • 1回复 待解决
宿主线程如何向worker子线程发送消息?
1181浏览 • 1回复 待解决
#鸿蒙通关秘籍#主线程和Worker线程在线程模型中承担什么职责?
974浏览 • 1回复 待解决
#鸿蒙通关秘籍#线程模型中,主线程和TaskPool Worker线程有啥区别?
1137浏览 • 1回复 待解决
HarmonyOS taskPool执行的task内如何回调主线程的方法
1628浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何监控Task的执行状态?
1191浏览 • 1回复 待解决
HarmonyOS 能够在主线程给 Worker 传递一个函数,让这个函数在 Worker 的线程中执行么?
821浏览 • 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%') } }