深入解读鸿蒙Stage模型(1),附答案解析

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
img

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

FA模型与Stage模型对比图

2、Stage模型能力特点

Stage模型能力示意图

Stage模型的设计,是为了提供给开发者一个更好的开发方式,更好的适用于多设备、分布式场景。

Stage模型的三大能力特点:

1)原生支持组件级的迁移和协同

Stage模型的组件天生具备分布式迁移和协同的能力,它是HarmonyOS支持分布式能力在应用模型上的体现。

应用组件支持跨设备的数据恢复:

充分使用ArkUI的声明式UI和多页面的能力,把数据/状态保存在UIAbility组件实例中,逻辑修改数据,数据驱动UI变化。多设备间迁移UIAbility,就是迁移UIAbility的数据/状态。在目标设备上通过数据/状态来恢复UI,实现逻辑与UI的解耦,提升了流转开发效率。

应用组件支持跨设备的远程调用:

UIAbility组件支持跨设备拉起另外一个设备上同名应用的同名组件实例。系统在拉起过程中,通过底层软总线的能力在两个组件实例之间建立跨设备的RPC连接,开发者在获取RPC接口后,即可进行跨设备通信,适用于应用在设备间交互的场景。

2)支持多设备形态和多窗口形态

在桌面设备上,窗口可以最大化/最小化/任意改变窗口大小,窗口间可以任意切换焦点,接收用户输入。在移动设备上,基本以全屏窗口为主,窗口之间构成栈结构,只有顶层窗口才能接收用户输入。如何在不同窗口形态的设备上,提供统一的组件模型呢?Stage模型分离了UIAbility生命周期和窗口显示/焦点事件,使得窗口的焦点切换不影响UIAbility组件的状态。

UIAbility的前后台状态和窗口的全屏/最小化的关系如下:

只有当窗口最小化的时候,UIAbility组件进入后台状态,否则UIAbility组件处于前台状态;

当一个窗口全屏的时候,触发其他窗口最小化(可以根据产品形态确定全屏窗口个数)。

在桌面设备和移动设备的交互体验不同的情况下,系统通过实施上述规则,可以保证UIAbility组件的生命周期定义在多设备上保持一致。同时,不论在桌面设备还是移动设备,都遵循每个新的UIAbility组件实例都会创建一个任务,所以也保证了任务(Mission)机制在多设备上的一致性。

3)重新定义应用能力边界

通常情况下,应用如果可自行决定创建多少个进程、自定义服务时,系统为保证用户体验,需要在后台运行管控、进程关联启动等方面对应用的运行状态进行强管理,从而降低系统总体的内存占用和功耗开销。

Stage模型基于场景的服务扩展、严格的后台管控机制和受限的进程模型,重新定义了应用能力边界,使进程环境从“无序”到“有序”,规范了进程管理模型。

二Stage模型介绍

基于Stage模型开发应用,下面将会从应用组件、进程模型、线程模型、任务模型、后台运行机制、应用配置文件6个方面进行介绍。

1、组件模型

应用开发模型中需要指明应用开发的入口。在HarmonyOS上,应用组件是应用开发的入口,同时也是运行时入口。用户启动、使用和退出应用过程中,应用组件会在不同的状态间切换,这些状态称为应用组件的生命周期。应用组件提供生命周期的回调函数,开发者通过应用组件的生命周期回调感知应用的状态变化。

图片

Stage模型组件类型

Stage模型提供了UIAbility和ExtensionAbility两种类型的组件。

1) UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。UIAbility的生命周期只包含创建/销毁/前台/后台等状态,通过WindowStage的事件暴露显示相关的状态。每个UIAbility组件都会有一个主窗口与之绑定,如果开发者希望开发复杂的页面和动效,我们推荐开发者使用ArkUI的多页面能力。UIAbility支持跨设备拉起同名组件,并与之协同交互的能力。

2)ExtensionAbility组件是一种面向特定场景的应用组件,系统在特定场景下启动该组件为用户提供服务。开发者并不直接从ExtensionAbility派生,而是从ExtensionAbility的派生类派生。目前ExtensionAbility有用于卡片场景的FormExtensionAbility和用于输入法场景的InputMethodExtensionAbility等多种派生类。在Stage模型上,普通应用开发者不能开发自定义服务,也不支持开发者直接启动ExtensionAbility,包括开发者自己编写的ExtensionAbility。

2、进程模型

进程模型示意图

Stage模型有三类进程,是从系统总体资源占用考虑,希望由系统负责应用进程的创建和销毁。所以不支持应用自定义配置多进程,也不支持通过接口启动进程。

1)主进程

开发者编写的UIAbility入口及其依赖的代码都在该进程中运行。它是由UIAbility组件的启动触发创建的。

2)ExtensionAbility进程

开发者编写的同一种类型的ExtensionAbility组件实例都会在同一个进程中运行。不同类型的ExtensionAbility组件实例则在不同的进程中运行。该类进程是由系统服务在特定场景下创建,并根据用户对特定场景的使用,决定其何时销毁。同时该类进程独立于主进程创建,并且不支持与主进程之间进行IPC通信。

3)Render进程

为了支持WebView的运行,每个应用只能创建一个Render进程用于运行WebView的渲染引擎。这个Render进程也是由系统负责创建和销毁。

3、线程模型

HarmonyOS的原生应用开发语言为ArkTS。在应用进程启动时,系统会在主线程上创建一个ArkTS的虚拟机实例,然后加载和执行应用的入口代码。应用组件的生命周期回调,输入事件的分发,ArkUI的布局等操作都会在主线程上执行,所以我们推荐开发者不要在主线程上执行单次耗时过长的操作,否则容易引发卡顿。

ArkTS通过提供Worker API支持并发编程。Worker有独立的虚拟机上下文,它与主线程是两个不同的虚拟机上下文。它们之间通过postMessage API进行通信。这种基于消息传递的并发模型与基于锁的并发模型不同,需要开发者特别注意。

4、任务模型

用户在操作应用的过程中,经常需要对已经操作过的应用进行切换,这些操作记录(不同OS的操作对象定义可能不同)经常被称为任务。应用任务管理模型需要定义任务的操作对象,以及任务创建和销毁的方式和时机。

在HarmonyOS上,每次用户启动一个新的UIAbility组件实例,都会生成一个新的任务(Mission)。例如,用户启动一个视频应用后,切换到“任务中心”界面,将会看到视频应用这个任务,当用户点击这个任务时,系统会把该任务切换到前台,如果这个视频应用中的视频编辑功能也是通过应用组件编写的,那么在用户启动视频编辑功能时,会创建视频编辑的应用组件实例,在“任务中心”界面中,将会展示视频应用、视频编辑两个任务。

任务(Mission)中记录了组件和快照的信息,并在系统中持久化。即使任务对应的组件实例销毁,任务仍然存在。如果用户从任务中心中选择某个任务,任务对应的组件实例会被拉到前台并获焦,如果它对应的组件实例已经销毁,系统会创建一个新的组件实例与之对应。

开发者在用户交互设计上需要特别注意,避免产生过多的任务。如果开发者希望使用多个页面交互,推荐使用ArkUI的页面栈能力。

HarmonyOS的任务模型不提供任务栈的能力,每个应用可以有多个任务在任务中心呈现,不同应用的任务不会以栈的形式堆叠在一起,避免了不同应用间任务混淆不清的情况。

5、后台运行机制

开发者在用户交互设计上需要特别注意,避免产生过多的任务。如果开发者希望使用多个页面交互,推荐使用ArkUI的页面栈能力。

HarmonyOS的任务模型不提供任务栈的能力,每个应用可以有多个任务在任务中心呈现,不同应用的任务不会以栈的形式堆叠在一起,避免了不同应用间任务混淆不清的情况。

5、后台运行机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值