HarmonyOS 如何在har类型的组件中定义单例
如何在har类型的自定义组件中定义单例
arkts-no-globalthis由于无法为globalThis添加静态类型,只能通过查找的方式访问globalThis的属性,造成额外的性能开销。
另外,无法为globalThis的属性标记类型,无法保证对这些属性操作的安全和高性能。因此ArkTS不支持globalThis。
建议按照业务逻辑根据import/export语法实现数据在不同模块的传递。
必要情况下,可以通过构造的单例对象来实现全局对象的功能。(说明:不能在har中定义单例对象,har在打包时会在不同的hap中打包两份,无法实现单例。)
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
关于文档中说har中不能用单例的疑惑
1851浏览 • 1回复 待解决
HarmonyOS 如何创建单例的WebView组件
41浏览 • 1回复 待解决
HAR包内的单例对象与HAR包相互之间依赖关系问题。
898浏览 • 1回复 待解决
HarmonyOS 单例对象如何实现
434浏览 • 1回复 待解决
HarmonyOS Entry和Hsp中创建的单例失效
451浏览 • 1回复 待解决
单例在hsp中存在多个的情况
287浏览 • 1回复 待解决
如何获取单例为undefined
478浏览 • 1回复 待解决
HarmonyOS 如何构建跨动态库的单例?
358浏览 • 1回复 待解决
HarmonyOS 单例模式拿不到类的对象
335浏览 • 1回复 待解决
实现单例模式下的数据存储
1052浏览 • 1回复 待解决
HarmonyOS Navigation是否有办法类似Router中的RouterMode实现单例模式
40浏览 • 1回复 待解决
Har包内的单例对象在被外部module访问时,拿到是新的对象吗? Har包是内存隔离的吗?
2046浏览 • 1回复 待解决
ArkTS层实例化与单例介绍
2973浏览 • 1回复 待解决
创建的单例换了页面后不生效问题
2199浏览 • 3回复 待解决
测试用例中取到resource类型中值的方法。
950浏览 • 1回复 待解决
HSP中,单例模式出现多份实例问题分析总结_2
883浏览 • 1回复 待解决
如何在HAR中获取targetname?
206浏览 • 1回复 待解决
HarmonyOS module类型修改,share类型如何修改为har类型
427浏览 • 1回复 待解决
HarmonyOS 模型数据结构处理,如何使用VM单例管理类?
324浏览 • 1回复 待解决
首选项获取实例,实例是否为单例
1960浏览 • 1回复 待解决
HarmonyOS ohos.data.preferences 数据存储,使用preferences 单例模式
199浏览 • 1回复 待解决
HarmonyOS 有锁吗?单例模式怎么创建?怎么多线程?
393浏览 • 1回复 待解决
如何在多个相同类型的picker组件中赋不同值?
4560浏览 • 1回复 待解决
HarmonyOS Debug期间在涉及到单例的执行链条中总会出现类似日志如下
401浏览 • 1回复 待解决
如何在har中获取hap中的配置信息?
274浏览 • 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改成