HarmonyOS taskpool+@Concurrent 时,全局单利对象无法使用,想问下有什么修改建议?
taskpool.execute(test).then(() => {
// 调度结果处理
let obj = MyStroage.getInstance().getObj()
console.error("222 test ==== test(): " + obj)
})
@Concurrent
async function test(aaa: AAA): Promise<void> {
let obj = MyStroage.getInstance().getObj()
console.error("222 test ==== test(): 我是test函数() " + obj)
}
export class MyStroage {
static my: MyStroage = new MyStroage()
public static getInstance(): MyStroage {
return MyStroage.my;
}
private mObj?:object
public save(obj: object) {
this.mObj = obj;
}
public getObj():object | undefined{
console.error("000 test ==== "+this.mObj)
return this.mObj
}
}
在test()函数中,无法拿到外部的单例对象,想问一下应该如何处理,方便在test()函数中获取到全局的单例对象。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
taskPool @Concurrent报红
2510浏览 • 1回复 待解决
openharmony arkui taskpool @concurrent装饰器如何使用
4899浏览 • 4回复 待解决
HarmonyOS 我想问下 return 一个Promise 为什么没用
274浏览 • 1回复 待解决
请问下有没有文字滚动动画组件?
185浏览 • 1回复 待解决
HarmonyOS TS文件可以使用taskpool,但是没办法用@Concurrent
224浏览 • 1回复 待解决
建议开发使用什么单位
1664浏览 • 1回复 待解决
请问下有没有FA卡片开发的demo参考
3353浏览 • 1回复 待解决
请问下有没有什么接口可以做到。
2454浏览 • 1回复 待解决
HarmonyOS 请问下在执行流水线时 使用什么来做代码的静态检查,类似lint
233浏览 • 1回复 待解决
如何使用TaskPool在子线程调用对象成员函数
210浏览 • 0回复 待解决
HarmonyOS taskpool执行@Concurrent修饰的方法在访问主线程中的单例变量时,变量是空的
75浏览 • 1回复 待解决
在TS文件里使用Concurrent注解报红,提示Cannot find name 'Concurrent'
988浏览 • 1回复 待解决
修改ForEach使用的数据对象,UI不刷新
1290浏览 • 1回复 待解决
HarmonyOS taskpool使用crash
1214浏览 • 2回复 待解决
使用taskpool实现多线程时,如何实现内存共享
2045浏览 • 1回复 待解决
HarmonyOS 将枚举转成对象,使用keyof会报错,怎么修改?
275浏览 • 1回复 待解决
@Sendable装饰器 用于解决无法在taskpool调用对象内的方法。为什么以装饰器的方式解决
1890浏览 • 1回复 待解决
Mac下有什么好的编程字体?
2346浏览 • 1回复 待解决
HarmonyOS Promise & taskpool使用问题
146浏览 • 1回复 待解决
HarmonyOS taskpool中new 对象报错未初始化
332浏览 • 1回复 待解决
HarmonyOS关于JSON 转换后对象的方法无法使用问题
465浏览 • 1回复 待解决
什么情况下建议拆分,什么情况不建议拆分?
77浏览 • 1回复 待解决
#鸿蒙学习大百科#在函数中修改外部作用域的变量时,为何建议通过参数传递?
99浏览 • 1回复 待解决
dialog底部弹起动画,想问下arkts如何实现控制dialog弹起收回的动画效果
208浏览 • 1回复 待解决
目前的话@Concurrent函数中暂不支持从外部拿对象进行操作。因为线程模型中,TaskPool所在的线程与主线程并不共享一个ArkTS引擎实例(详细线程模型文档可参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/thread-model-stage-V5
所以在执行MyStroage.getInstance()时,主线程和TaskPool线程不会拿到同一个MyStroage对象。
从TaskPool的应用场景来看,也不推荐在TaskPool中使用和操作全局对象。目前说的是通过单例调用模块功能,这个是支持的。
参考代码:
如果没有在主线程与TaskPool线程对同一单例进行修改或需要TaskPool读取主线程单例信息的需求,上述方案不会有问题。如果有,则可以通过@Sendable装饰器实现跨进程传递对象,此传递为引用传递。@Sendable详细文档教程可以参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-sendable-V5