鸿蒙应用开发快速学习指南(中级篇-1 应用程序框架进阶)

应用程序框架进阶

第一课:应用程序框架进阶

从中级课程开始,课程会更加注重于场景与实际运用,因此中级篇与高级篇就不会从习题开始,而是从课程内容、文档中提炼重要的部分,当然习题作为检验学习成果的一部分,也会在文章中有提到。

核心内容

UIAbility进阶

1. AbilityStage组件容器介绍
在官方的介绍中:

AbilityStage是一个Module级别的组件容器,应用的HAP在首次加载时会创建一个AbilityStage实例,可以对该Module进行初始化等操作。
AbilityStage与Module一一对应,即一个Module拥有一个AbilityStage

        从官方的介绍中,可以看到其应用程序的构建,仍然是一种多模块的构建方式,HAP类似于Java程序中的jar或者war,类比于spring boot框架,相当于spring boot application,负责了该模块的启动、初始化。区别在与spring boot application负责spring容器及其中的bean,AbilityStage负责module中的Ability。
        类比总结可以得到以下三点内容:

  • AbilityStage 在 HarmonyOS 中是 模块级 的组件容器,类似于 SpringBootApplication 或 ApplicationContext,它用于初始化模块中的Ability,并管理模块的生命周期。
  • 在 HAP 被首次加载时,AbilityStage 被实例化并初始化模块中的Ability,这类似于 Spring Boot 启动时通过 @SpringBootApplication 扫描、加载并初始化应用的各个 Bean。
  • AbilityStage 负责对模块的初始化,提供模块运行时的必要支持,而 SpringBootApplication 也是负责对整个 Spring 应用的启动和初始化。
    2. UIAbility组件的启动模式
    在官方的介绍中:

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式:

  • singleton(单实例模式)
  • multiton(多实例模式)
  • specified(指定实例模式)
  • 单实例模式作为默认的启动模式,会每次调用startAbility()方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用系统中的UIAbility实例。系统中只存在唯一一个该UIAbility实例,即在最近任务列表中只存在一个该类型的UIAbility实例。由于启动的还是原来的UIAbility实例,并未重新创建一个新的UIAbility实例,此时只会进入该UIAbility的onNewWant()回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调。其应用场景也是最广泛的。
  • 多实例模式每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例。即在最近任务列表中可以看到有多个该类型的UIAbility实例。可能在多窗口场景、分屏场景中有很好的应用。
  • 指定实例模式针对一些特殊场景使用(例如文档应用中每次新建文档希望都能新建一个文档实例,重复打开一个已保存的文档希望打开的都是同一个文档实例)。在创建UIAbility实例之前,开发者可以为该实例指定一个唯一的字符串Key,这样在调用startAbility()方法时,应用就可以根据指定的Key来识别响应请求的UIAbility实例。在EntryAbility中,调用startAbility()方法时,可以在want参数中增加一个自定义参数,例如instanceKey,以此来区分不同的UIAbility实例。由于SpecifiedAbility的启动模式被配置为指定实例启动模式,因此在SpecifiedAbility启动之前,会先进入对应的AbilityStage的onAcceptWant()生命周期回调中,以获取该UIAbility实例的Key值。然后系统会自动匹配,如果存在与该UIAbility实例匹配的Key,则会启动与之绑定的UIAbility实例,并进入该UIAbility实例的onNewWant()回调函数;否则会创建一个新的UIAbility实例,并进入该UIAbility实例的onCreate()回调函数和onWindowStageCreate()回调函数。

3. UIAbility组件间的交互
在官方介绍中:

UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,包括应用内的其他UIAbility、或者其他应用的UIAbility(例如启动三方支付UIAbility)。

        在启动应用内的Ability的场景,可以通过在EntryAbility调用startAbility()方法启动UIAbility,want为UIAbility实例启动的入口参数,其中bundleName为待启动应用的Bundle名称,abilityName为待启动的Ability名称,moduleName在待启动的UIAbility属于不同的Module时添加,parameters为自定义信息参数。

// EntryAbility中的某组件的绑定事件
onClick(() => {
   
   
// context为Ability对象的成员,在非Ability对象内部调用需要
	// 将Context对象传递过去
	 let wantInfo: Want = {
   
   
		   deviceId: '', // deviceId为空表示本设备
		   bundleName: 'com.samples.stagemodelabilitydevelop',
		   moduleName: 'entry', // moduleName非必选
		   abilityName: 'FuncAbilityA',
		   parameters: {
   
   
			     // 自定义信息
			     info: '来自EntryAbility Page_UIAbilityComponentsInteractive页面'
		   },
	 };
	 // context为调用方UIAbility的UIAbilityContext
	 this.context.startAbility(wantInfo).then(() => {
   
   
		   hilog.info(DOMAIN_NUMBER, TAG, 'startA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗大宝贝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值