系列文章目录
前言
上一篇文章,简单介绍了鸿蒙开发的软件运行机制以及Stage模型的基本概念,这篇继续学习Stage模型相关特性。
一、Stage模型应用组件
1.UIAbility组件
1.1.UIAbility组件概述
包含UI界面与用户交互的应用组件,系统调度的基本单元,为应用提供绘制界面窗口;一个UIAbility组件可以通过多个页面来实现一个功能模块;每一个UIAbility组件实例,都对应于一个最近任务列表中的任务。
UIAbility使用,需要在module.json5配置文件的abilities标签中声明UIAbility的名称、入口、标签等相关信息,前面文章我们创建的HelloWorld项目,默认生成的配置项:
项目中不是使用UIAbility组件,而是创建了一个EntryAbility继承自UIAbility,这里体现Stage模型面向对象的开发方式
1.2.UIAbility组件生命周期
应用中的UIAbility实例会在其生命周期的不同状态之间转换,不同状态切换是由用户打开、切换和返回操作触发。UIAbility类提供了一系列回调方法,当UIAbility实例的某个状态发生改变就触发回调方法调用。对于Vue开发比较熟悉的同学很好理解,类似Vue框架中钩子函数。
各种状态说明如下:
1.3.UIAbility组件启动模式
注:我的理解,一个应用每调用一次startAbility()创建一个Ability实例,对应系统中的一个任务项。当我们把任务项划掉,可以理解为销毁对应Ability实例。单实例模式,同个应用只会存在一个Ability实例;多实例模式,同个应用会存在多个Ability实例;指定模式,是多实例模式的一种特殊情况。同一个应用从操作系统的角度理解,就对应一个进程。
1.4.UIAbility组件基本用法
指定启动页面 应用中的UIAbility在启动过程中,需要指定启动页面,否则应用启动后会因为没有默认加载页面而导致白屏。在onWindowStageCreate()生命周期回调中,通过loadContent方法设置启动页面
获取UIAbility上下文信息 通过UIAbilityContext可以获取UIAbility的相关配置信息,如包代码路径、Bundle名称、Ability名称和应用程序需要的环境状态等属性信息,以及可以获取操作UIAbility实例的方法(如startAbility()、connectServiceExtensionAbility()、terminateSelf()等)
-
在UIAbility中可以通过this.context获取UIAbility实例的上下文信息。
-
在页面中Index.ets获取UIAbility实例的上下文信息。
1.5.UIAbility组件与UI数据同步
使用EventHub进行数据通信 EventHub提供了UIAbility组件/ExtensionAbility组件级别的事件机制,以UIAbility组件/ExtensionAbility组件为中心提供了订阅、取消订阅和触发事件的数据通信能力。通信方式实现步骤:
step1:在UIAbility中调用eventHub.on()方法注册一个自定义事件“event1”
step2:在UI界面中通过eventHub.emit()方法触发该事件,在触发事件的同时,根据需要传入参数信息
step3:时间使用完成后,可以根据需要调用eventHub.off()方法取消该事件的订阅
使用globalThis进行数据同步 globalThis是ArkTS引擎实例内部的一个全局对象,引擎内部的UIAbility/ExtensionAbility/Page都可以使用,因此可以使用globalThis全局对象进行数据同步
1.6.UIAbility组件间交互
待续。。。
总结
本文记录UIAbility组件的相关概念以及知识点,内容偏理论,看起来枯燥乏味,就是良药苦口见效慢,但是能从根上解决问题。同样对于UIAbility组件的理解对我们从事鸿蒙开发有非常大的好处,能更好的理解鸿蒙应用的运行机制。
今天就记录这么多吧!聊聊我们“遥遥领先“的资本市场吧,今天的A股硬气了一把,今天晚上我在老婆面前也可以硬气一把。太不容易了,吃了一年的面,今天总算改善了点伙食。这算是跌透了吗?跌无可跌了吗?不知道,曾经的自信心被打击的荡然无存。现在像个过街老鼠一样,惶惶不可终日。不管后面的行情能不能向今天这样持续下去,我依然坚守,可能套太多了,自己安慰自己吧。