2024年鸿蒙面试题:请聊聊HAR 和 HSP 的使用场景?_多hap场景,2024年最新面试自我介绍模板

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

我第一次使用 HSP 的时候,就把自己引入了一个大坑里。

utils 模块是一个 HAR 类型的工具库,提供了一个 单例 preference 工具类 PreferenceUtil

export class PreferenceUtil {
private preferences?: data_preferences.Preferences
private static instance: PreferenceUtil
private preferenceName = “HarmonyWorld”

private constructor() {
}
// 单例
public static getInstance(): PreferenceUtil {
if (!PreferenceUtil.instance) {
PreferenceUtil.instance = new PreferenceUtil()
}
return PreferenceUtil.instance
}

// 传入 context 对 preferences 进行初始化
init(context: Context, preferenceName: string) {
try {
this.preferences = data_preferences.getPreferencesSync(context, { name: preferenceName })
} catch (err) {
Log.error(“Failed to get preferences. code =” + err.code + “, message =” + err.message)
}
}


}

我在 entry HAP 的 EntryAbility 中进行初始化:

onWindowStageCreate(windowStage: window.WindowStage): void { PreferenceUtil.getInstace.init(this.context, "HarmonyWorld) }

这样在 entry 模块中进行键值对的存储都是可以正常使用的。但是当我在另一个 HSP 模块中使用时,却遇到了一些问题。

简化的项目架构是这样的。

我在 HSP 中引用 PreferenceUtil 无法获取之前存储的值,断点调试甚至发现 this.preferences 并没有被初始化,连 HSP 中的 PreferenceUtil 都是一个全新的对象,并不是之前的单例对象,在 entry 模块的初始化操作在这里没有产生任何作用。

由此可见,HAR 不仅在 HAP 中会有代码重复的问题,在 HSP 中也是。

没错,官网的图片,一开始我就看漏了细节。我提供一个重绘版本,用背景色区分一下 HAP 和 HSP。

HAR 会被编译打包到所有依赖该模块的 HAP 和 HSP 。

HSP 在所有依赖该模块的 HAP 和 HSP 中共享。

这就直接拔高了 HSP 的地位,它的使用场景也显然并不是和 HAR 一样仅仅作为公共依赖库。我们再来看一下 HSP 的 module.json5 :

{
“module”: {
“name”: “hspOne”,
“type”: “shared”,
“description”: “ s t r i n g : s h a r e d d e s c " , " d e v i c e T y p e s " : [ " p h o n e " , " t a b l e t " , " 2 i n 1 " ] , " d e l i v e r y W i t h I n s t a l l " : t r u e , " p a g e s " : " string:shared_desc", "deviceTypes": [ "phone", "tablet", "2in1" ], "deliveryWithInstall": true, "pages": " string:shareddesc","deviceTypes":["phone","tablet","2in1"],"deliveryWithInstall":true,"pages":"profile:main_pages”
}
}

deliveryWithInstall ,可以配置安装时是否下载。这其实就满足了 Dynamic Feature 的特性,让 HSP 也可以设计为 按需加载 的模块。

同样具备按需加载能力,它和 HAP 最大的区别是,HAP 具备独立运行和安装的能力,可以使用 Ability,可以有独立任务栈,而 HSP 只能跟随宿主 HAP 进行分发。

所以 HSP 的真实使用场景其实是 不需要 Ability 能力的按需加载模块 。

HSP 模块过多也会存在一定问题,带来了额外的动态加载的性能损耗。

架构设计原则

厘清了 HAP/HSP/HAR 的特性之后,我们对项目的架构设计原则也有了初步的认识。

首先要确定项目采取 单 HAP 还是 多 HAP 。

如果需要多设备类型按需分发,可以选择多 HAP。

如果业务设计上可以是完全独立的功能模块,且需要 Ability 来提供独立的任务窗口,例如微信小程序,可以选择多 HAP。

在多 HAP 场景下,需要考虑相同 HAR 包重复引用的问题。在包体积可控的情况下,可以完全采用全 HAR 包的模式。如果比较介意包体积的话,可以考虑使用 HSP 来共享多 HAP 之间的公共模块。但是一般不是对所有公共模块都使用 HSP,而是提供一个 HSP 壳,来包装需要公共使用的 HAR 模块。

对于没有那么复杂的应用来说,单 HAP 已经完全可以满足需求。这时候 HSP 的作用就只有 按需加载 了。如果不需要按需加载,可以直接采用全 HAR 的模式,简单高效,无代码重复问题。如果需要按需加载,和多 HAP 模式一样,HAR 会被打包进依赖它的 HAP/HSP,处理方式同多 HAP,要么直接全 HAR,要么通过 HSP 壳包装公共 HAR。

以上设计模式并非什么金科玉律,HAR 重复引用带来的代码重复问题,HSP 动态加载带来的安装速度和性能问题,在实际开发过程中都会面临不同的取舍。

一张图总结一下:

对于现阶段的鸿蒙,还存在一定的不确定性。HSP 不支持应用间共享,单应用虚拟机中多 HSP 之间的 HAR 重复看起来并没有什么意义,不知道官方后续会不会有什么修 改。另外大多数团队都不太会上来直接做一个完全复刻 Android 的版本,业务上也会做一些取舍。

如果你比较纠结模块设计方案的话,初期不妨从 单 HAP + 全 HAR 开始,简单高效,后期改造也比较方便。

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(**ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony****多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)**技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料****

鸿蒙(HarmonyOS NEXT)最新学习路线

  • HarmonOS基础技能

  • HarmonOS就业必备技能 
  • HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

《鸿蒙开发基础》
  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值