【HarmonyOS NEXT】工程模块化,HSP、HAR的困惑

【关键字】

模块化 / HSP / HAR / 静态共享包 / 动态共享包 /启动耗时 / 包体大小

【问题描述】

  1. 如项目只需一个entry模块,该entry模块中是否只需一个UIAbility组件就足够?多UIAbility组件是否仅当需要在任务视图中看到多个任务、或者需要同时开启多个窗口时才需使用?

  2. 对于各个业务模块、底层功能模块,在HAR和HSP的选择上有什么建议?二者的加载机制有什么区别?对启动耗时和包体大小影响的差异是什么?

  3. HSP的按需加载,主要适用于什么场景?

  4. 如果app为单HAP,各个业务模块需要有业务组件,且会有一些底层通用的组件被各个业务组件依赖,那么业务组件和通用组件分别推荐使用什么?

  5. 以下几种依赖情况下,是否支持Navigation方式的页面跳转和返回?

    HAP->HSP, HAP->HAR, HSP->HSP, HSP->HAR, HAR->HAR, HAR->HSP

【解决方案】

  1. 如果该entry模块没有在任务视图中看到多个任务或者同时开启多个窗口的需求,一个UIAbility即可满足需求。

    参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/uiability-overview-0000001774119974

  2. HAR是静态共享包,编译态复用。

    • 支持应用内共享,也可以发布后供其他应用使用。

    • 多包(HAP/HSP)引用相同的HAR时,会造成多包间代码和资源的重复拷贝,从而导致应用包膨大。

    • 不同HAP包引入同一个HAR包,无法实现数据的共享。

    HSP是动态共享包,运行时复用。

    • 当前仅支持应用内共享。

    • 当多包(HAP/HSP)同时引用同一个共享包时,采用HSP替代HAR,可以避免HAR造成的多包间代码和资源的重复拷贝,从而减小应用包大小。

    • 同一进程,运行时可共享代码,相比har包能有效减少内存消耗,同时能实现数据共享(比如常用的单例模式)。

    使用建议如下:

    • 二方库/三方库场景:开发者开发的模块,需要暴露给其他应用使用 (公司内或者公司外) 时,只能使用HAR。

    • 单HAP场景:如果没有按需加载诉求,推荐使用单HAP + HAR;如果有按需加载诉求,推荐使用HSP。HAP (独有的HAR) + 按需加载的HSP (独有的HAR) ==》公共HSP (封装公共的HAR)。

    • 多HAP场景: 如果多HAP没有共用的资源,推荐使用多HAP + HAR;如果多HAP有共用的资源,推荐使用HSP封装。HAP1 (独有的HAR) + HAP2 (独有的HAR) ==》公共HSP (封装公共的HAR)

    参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-package-overview-0000001820999513

  3. HSP一般适用于将不常用的功能封装成一个模块按需加载。

  4. 建议业务组件使用HSP,通用组件使用HAR。

  5. 以上6种依赖场景下都支持页面跳转和返回的,可以将目标跳转页面放到NavDestination中,同时将NavPathStack传递到HAR/HSP,跳转通过NavPathStack实现。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值