相关问题
#鸿蒙通关秘籍#在鸿蒙API 13环境中Worker如何实现和宿主线程的即时消息通信?
166浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Worker对宿主线程接口的同步调用?
244浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中避免在主线程中执行耗时操作
367浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中如何使用TaskPool同时执行多个耗时任务?
225浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何避免在组件的属性刷新过程中执行耗时操作?
321浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现独立执行的耗时任务?
255浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何获取拖拽过程中传递的数据?
213浏览 • 1回复 待解决
TaskPool在任务执行过程中如何跟主线程进行通信?如何操作同一块内存变量
2312浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中启动组件时,后台应用有哪些限制?
337浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统中如何管理文件选择过程中得到的URI?
212浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙应用中如何使用UI主线程调用多线程方法?
291浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙开发中如何为RN框架优化线程执行?
243浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现鸿蒙API 13中EmbeddedUIExtensionAbility的生命周期管理?
356浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何执行创建的Task?
381浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何在鸿蒙应用开发中避免在主线程执行耗时网络请求以提高UI流畅度?
165浏览 • 0回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中使用Swiper实现循环播放功能?
240浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统测试过程中如何验证日志内容的输出?
245浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Swiper组件的自动播放功能?
266浏览 • 1回复 待解决
HarmonyOS taskPool执行的task内如何回调主线程的方法
796浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何监控Task的执行状态?
381浏览 • 1回复 待解决
宿主线程如何向worker子线程发送消息?
566浏览 • 1回复 待解决
#鸿蒙通关秘籍#我好奇,适配过程中,如何避免应用数据的冲突?
251浏览 • 1回复 待解决
HarmonyOS 能够在主线程给 Worker 传递一个函数,让这个函数在 Worker 的线程中执行么?
242浏览 • 1回复 待解决
#鸿蒙通关秘籍#线程模型中,主线程和TaskPool Worker线程有啥区别?
372浏览 • 1回复 待解决
#鸿蒙通关秘籍#主线程和Worker线程在线程模型中承担什么职责?
346浏览 • 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%') } }