相关问题
#鸿蒙通关秘籍#如何在鸿蒙开发中实现数据的多线程处理并更新UI?
45浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中实现懒加载评论数据并更新UI?
71浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中检测Worker线程异常并防止应用崩溃?
67浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何在HarmonyOS NEXT中使用ArkUI进行动态UI更新?
150浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙应用中如何使用UI主线程调用多线程方法?
54浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在UIAbility中更新资源和数据
43浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkUI中应用前景模糊效果?
62浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙ArkUI中创建并显示自定义弹窗?
25浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在EntryAbility.ets中监控屏幕方向并更新状态?
62浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何处理页面返回并传递数据?
62浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在Worker子线程中实现文件解压并将结果返回主线程?
87浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙UI开发中应用CSS伪类?
49浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙NEXT应用中动态更新显示网络状态?
94浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS应用中存储数据?
110浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙应用中使用标准化数据通路实现数据更新?
63浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中基于ArkUI的网格布局中显示数据?
43浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在TaskPool子线程中预加载So库并调用其函数?
76浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙应用中创建视频组件并加载本地视频?
39浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中创建并获取键值型数据库
44浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkUI中实现模态弹窗?
37浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkUI中使用makeObserved处理Sendable数据?
65浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在应用中处理数据库的数据迁移?
35浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在TaskPool子线程中预加载.so库并通过句柄调用函数?
98浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkUI中实现背景模糊效果?
75浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkUI中定制化手势判定
83浏览 • 1回复 待解决
在鸿蒙系统的ArkUI中,能够在子线程中处理数据,并在更新UI时做到线程安全。使用makeObserved来将Sendable类型的数据变为可观察对象,允许你在数据变化时自动更新UI。以下是实现方法:
typescript import { taskpool } from '@kit.ArkTS'; import { SendableData } from './SendableData'; import { UIUtils } from '@kit.ArkUI';
@Concurrent function threadGetData(param: string): SendableData { let ret = new SendableData(); console.info(
Concurrent threadGetData, param ${param}
); ret.name = param + "-o"; ret.age = Math.floor(Math.random() * 40); ret.likes = Math.floor(Math.random() * 100); return ret; }@Entry @ComponentV2 struct Index { @Local send: SendableData = UIUtils.makeObserved(new SendableData());
build() { Column() { Text(this.send.name) Button("change name").onClick(() => { this.send.name += "0"; })
} }
这个方案确保了数据在子线程的处理结果可以通过makeObserved在UI线程中被观察,从而做到数值变化时UI同步更新。