相关问题
#鸿蒙通关秘籍#在鸿蒙API 13环境中Worker如何实现和宿主线程的即时消息通信?
247浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Worker对宿主线程接口的同步调用?
311浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中避免在主线程中执行耗时操作
436浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中如何使用TaskPool同时执行多个耗时任务?
290浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现独立执行的耗时任务?
332浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何避免在组件的属性刷新过程中执行耗时操作?
421浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙应用中如何使用UI主线程调用多线程方法?
340浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何实现鸿蒙API 13中EmbeddedUIExtensionAbility的生命周期管理?
463浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙API 13中启动组件时,后台应用有哪些限制?
382浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统中如何管理文件选择过程中得到的URI?
281浏览 • 1回复 待解决
#鸿蒙通关秘籍#在鸿蒙开发中如何为RN框架优化线程执行?
307浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何在鸿蒙应用开发中避免在主线程执行耗时网络请求以提高UI流畅度?
219浏览 • 0回复 待解决
TaskPool在任务执行过程中如何跟主线程进行通信?如何操作同一块内存变量
2369浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何执行创建的Task?
461浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何获取拖拽过程中传递的数据?
302浏览 • 1回复 待解决
Worker的宿主线程必须是主线程吗?
742浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中使用Swiper实现循环播放功能?
308浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙API 13中实现Swiper组件的自动播放功能?
336浏览 • 1回复 待解决
#鸿蒙通关秘籍#线程模型中,主线程和TaskPool Worker线程有啥区别?
509浏览 • 1回复 待解决
#鸿蒙通关秘籍#主线程和Worker线程在线程模型中承担什么职责?
460浏览 • 1回复 待解决
宿主线程如何向worker子线程发送消息?
658浏览 • 1回复 待解决
HarmonyOS 能够在主线程给 Worker 传递一个函数,让这个函数在 Worker 的线程中执行么?
283浏览 • 1回复 待解决
宿主线程如何接收子线程发送的消息?
738浏览 • 1回复 待解决
HarmonyOS taskPool执行的task内如何回调主线程的方法
976浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统测试过程中如何验证日志内容的输出?
397浏览 • 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%') } }