Stage模型详解,UIability------Harmony OS 开发(第五期)

本文详细解释了Stage模型在应用程序中的架构,包括模块分类、UIAbility作为入口模块的作用、配置文件(app.json5和module.json5)、页面跳转机制、以及UIAbility的生命周期管理,包括启动模式如singleton、multiton和specified的区别与使用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

stage模型

image.png

如上图所示,蓝色框内就是代表一个模块,一个工程下可以有n个模块,但只能有一个entry模块,即入口模块(核心),里面是该APP的主要功能。模块分为两种类型:Ability Module和Library Module模块,前者是能力模块,用于实现对应的页面和功能,后者是共享模块,里面的功能和已经创建的组件可以被其他模块共同调用,减少重复代码的书写。 所有模块在编译期统称为Bundle。每个模块都可以单独运行和测试

image.png

在代码运行时,每个模块都会搭建各自的"舞台",结构如上图,ArkUI Page :展示出来的UI界面,即与用户直接交互的地方,UIAbility是包含UI界面的应用组件,通过Window来将UI界面展示给用户,WindowStage是窗口的"舞台"。一个模块下可以有多个ability。

stage模型应用配置文件

image.png

image.png

app.json5 文件里面是整个APP的全局配置信息,“bundleName” 是APP对应的唯一标识。"icon"对应APP在设置中的应用管理中的应用图标,"label"对应的是应用在设置中的应用管理中的名称。

image.png

module.json5 文件是对应模块特有的配置文件,“requestPermission” 用于向用户或系统申请权限,“name” 对应的是该模块名字,“type” 对应的是该模块的类型,
“description” 用于描述该模块内容,“mainElement” 当该模块下有多个ability(UIAbility或ExtensionAbility)时,用于标识入口ability,“deviceTypes” 该模块适用的设备,
“deliveryWithInstall” 该模块是否跟着APP一同被安装(有些模块可以设置为用户选择性安装),“pages” 是存放该模块下所有的页面路径的文件,“abilities” 是该模块下所有ability的对应属性,其中的"icon"和"label"对应的是APP在桌面上的应用图标和名称,"launchType"对应该ability的启动模式

应用程序入口—UIAbility

UIAbility概述

UIAbility就是包含有用户界面的一个组件-----即应用程序的入口,通过用户界面与用户进行交互。其也是系统调度的单元

打开程序,进入用户界面,有3种方法:

1.点击桌面图标进入应用。

2.在一个应用中打开另一个应用。

3.从最近任务列表中切回应用(每一个UIAbility实例,都对应一个最近任务列表中的任务,一个应用可以有一个或者多个UIability,而UIability里面也可以有一个或者多个页面)。

如一般的浏览器应用,通过一个UIAbility结合多页面的形式为用户提供服务。

页面间的跳转和数据传递

注意:页面通过DevEco进行创建,会自动注册

捕获.PNG
若是通过拷贝复制,或创建ArkTS空白文件而得到的页面,需要开发者去手动注册:

2a248bda8f66489a8046dd61d5b300f3.png

代码中所有的跳转页面路径必须按照注册的路径写,不能缩写

页面跳转

引入头文件:import router from '@ohos.router';

通过方法1:router.pushUrl()(新建一个页面,不会销毁原页面)

router.pushUrl({
   
    url: 'pages/Second',     //要跳转的目标页面所在路径
    params: {
   变量名:}  //由要跳转的原页面传递过去的参数
    
},router.RouterMode.Single)

(变量名是随意命名的,值是你要传递的那个值)

router.RouterMode.Singlerouter.RouterMode.Standard表示单例模式和多例模式。

在单例模式下,如果目标页面URL在页面栈已经存在相同的URL页面,离栈顶最近的相同的URL页面会被移动到栈顶,移动后的页面为新建页,原来的页面仍然存在栈中,页面栈中的元数数量不变,如果目标页面URL在页面栈中不存在相同的URL页面,按多例模式跳转,页面总个数+1。

通过方法2:router.replaceUrl()(新建一个页面,替换并销毁原页面)

注意:由于当前页面被替换并销毁,把以跳转回去后就无法再回退回来了

router.replaceUrl({
   
    url: 'pages/Second',    //要跳转的目标页面所在路径
    params:{
   变量名:}    //由要跳转的原页面传递过去的参数
},router.RouterMode.Single)

在单例式下,如果目标页面的URL在页面栈已经存在相同的URL页面,离栈顶最近同URL页面会被移动到栈顶,替换当前页面,并销毁被替换的当前页面,移动后的页面为新建页面,页面栈的元素数量会-1;如果目标页面的URL在页面栈中不存在相同的URL页面,按多例模式跳转,页面栈元素数量不变。

参数接收与页面返回

  • 通过调用router.getParams()方法来接收传递过来的自定义参数
import router from '@ohos.router';
 
@Entry
@Component
struct Second {
   
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

freejackman

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

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

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

打赏作者

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

抵扣说明:

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

余额充值