HarmonyOS 如何在har类型的组件中定义单例
如何在har类型的自定义组件中定义单例
arkts-no-globalthis由于无法为globalThis添加静态类型,只能通过查找的方式访问globalThis的属性,造成额外的性能开销。
另外,无法为globalThis的属性标记类型,无法保证对这些属性操作的安全和高性能。因此ArkTS不支持globalThis。
建议按照业务逻辑根据import/export语法实现数据在不同模块的传递。
必要情况下,可以通过构造的单例对象来实现全局对象的功能。(说明:不能在har中定义单例对象,har在打包时会在不同的hap中打包两份,无法实现单例。)
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
关于文档中说har中不能用单例的疑惑
1493浏览 • 1回复 待解决
HarmonyOS 单例对象如何实现
108浏览 • 1回复 待解决
HarmonyOS Entry和Hsp中创建的单例失效
136浏览 • 1回复 待解决
HAR包内的单例对象与HAR包相互之间依赖关系问题。
555浏览 • 1回复 待解决
如何获取单例为undefined
133浏览 • 1回复 待解决
HarmonyOS如何在自定义组件的自定义函数中获取当前的 NavPathStack
158浏览 • 1回复 待解决
实现单例模式下的数据存储
627浏览 • 1回复 待解决
如何在多个相同类型的picker组件中赋不同值?
4326浏览 • 1回复 待解决
创建的单例换了页面后不生效问题
1955浏览 • 3回复 待解决
测试用例中取到resource类型中值的方法。
529浏览 • 1回复 待解决
HarmonyOS module类型修改,share类型如何修改为har类型
146浏览 • 1回复 待解决
HarmonyOS Debug期间在涉及到单例的执行链条中总会出现类似日志如下
169浏览 • 1回复 待解决
Har包内的单例对象在被外部module访问时,拿到是新的对象吗? Har包是内存隔离的吗?
1662浏览 • 1回复 待解决
HSP中,单例模式出现多份实例问题分析总结_2
514浏览 • 1回复 待解决
ArkTS层实例化与单例介绍
1441浏览 • 1回复 待解决
如何在自定义函数中创建一个UI组件
1551浏览 • 1回复 待解决
如何在自定义弹窗中再次弹窗
1877浏览 • 1回复 待解决
HarmonyOS IjkMediaPlayer目前仅提供单例模式,是否可以支持创建多个?
125浏览 • 1回复 待解决
HarmonyOS 如何以release编译类型编译HAR包
118浏览 • 1回复 待解决
如何在父组件中调用子组件封装的方法
1042浏览 • 1回复 待解决
首选项获取实例,实例是否为单例
1665浏览 • 1回复 待解决
如何在Tabs中的tabBar,添加其他组件
222浏览 • 1回复 待解决
定义可动画属性如何在应用开发中实现?
112浏览 • 1回复 待解决
HarmonyOS har中定义的export const变量初始化的时机
134浏览 • 1回复 待解决
如何在组件的page页面中关闭当前的Ability?
1400浏览 • 1回复 待解决
HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝。
因此har无法实现单例。参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-package-overview-0000001820999513
如果想要实现单例的话,在多hap工程中har无法实现单例,这边建议将公共能力模块har封装成成hsp包,减少har的重复编译打包,
可以参考文档,多Hap工程 中 包含公共能力模块 以APP SIze优先的方案,缺点是无法跨应用共享,启动性能相对较差.
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/bpta-modular-design-0000001678046862#section64326249113
如果只是实现功能,而不用考虑单例等因素,可以直接使用har包。
关于如何开发har包和hsp包,可以参考文档中,开发静态共享包 和 开发动态共享包
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-creating-har-api9-0000001518082393
HAR 中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;
创建整个应用全局唯一的单例:
如果是持久化轻量级数据,可以使用用户首选项功能:
参考文档:
https://developer.huawei.com/consumer/cn/doc/atomic-references/js-apis-data-preferences-0000001824697893
如果是应用全局的UI状态存储,可以使用AppStorage:
参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-appstorage-0000001774279622以上两种均可用于持久化存储,建议参考文档中的推荐,讲数据内容类的存储进用户首选项,将ui状态类的,存储到AppStorage中。
目前确实存在hsp和hap都引用har中的static变量,hsp中变量地址值不一致的问题。了解到目前有需求正在跟踪中,请耐心等待目前有个规避方案,适用于您给的demo
1. 将RouterModule模块单独编译成.har
2. 在工程级新建lib目录,将RouterModule.har放入
3. 将项目中所有依赖RouterModule的模块的oh-package.json5改成