Harmony OS—UIAbility的使用

news/2024/7/21 9:24:53 标签: 华为, harmonyos

概述

UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。一个应用可以有一个UIAbility,也可以有多个UIAbility,类似于Android 的 Activity,如果有安卓基础的同学,也可以结合过往知识点学习。比如

页面跳转

设置路由

要想实现页面间(Ability)的跳转,第一步需要设置路由,即我们可以在index.ts文件内,引入

import router from '@ohos.router';

跳转方式

1.router.pushUrl

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

 router.pushUrl({
              url: 'pages/Second',
              params: {
                src: 'Index页面传来的数据',
              }
            }, router.RouterMode.Single)

DOC.NOTE

当页面栈的元素数量较大或者超过32时,可以通过调用router.clear()方法清除页面栈中的所有历史页面,仅保留当前页面作为栈顶页面。

2.router.replaceUrl

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

 router.replaceUrl({
              url:'pages/Second',
              params:{
                src: `Index页面传来的数据`,
              }
            },router.RouterMode.Single)

以上两种方式都可以实现页面的挑战,分析参数可知,url是页面的具体路径,params{}标签是需要传递的参数,mode参数是跳转模式,在API9及以上,router.pushUrl和router.replaceUrl方法新增了mode参数,可以将mode参数配置为router.RouterMode.Single单实例模式router.RouterMode.Standard多实例模式

页面返回

1.返回上一个页面

如果是router.pushUrl跳转的页面,我们可以通过下面代码返回上层页面。

router.back();

2.返回到指定页面

router.back({ url: 'pages/Index' });

除了直接返回,我们还可以在返回前,开启页面返回询问对话框

            router.enableAlertBeforeBackPage({
              message: 'Message Info'
            });
            router.back();

参数传递

在页面跳转的方法里,我们通过params:{ src} 传递了一个string类型的参数。

router.pushUrl({
                url:'pages/Second',
                params:{
                  src: `Index页面传来的数据`,
                }
              },router.RouterMode.Standard)

在Second,我们可以在onPageShow生命周期函数里,通过

this.src = router.getParams()?.['src'];

接收使用

同理,在页面返回的方法内,我们可以通过params{ }回传参数

router.back({
              url: 'pages/Index',
              params: {
                src: 19986,
              }
            })

生命周期

在UIAbility的使用过程中,会有多种生命周期状态。掌握UIAbility的生命周期,对于应用的开发非常重要。为了实现多设备形态上的裁剪和多窗口的可扩展性,系统对组件管理和窗口管理进行了解耦。UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态,WindowStageCreate和WindowStageDestroy为窗口管理器(WindowStage)在UIAbility中管理UI界面功能的两个生命周期回调,从而实现UIAbility与窗口之间的弱耦合

根据图示,我们对于UIAbility的生命周期函数有了一个初步的了解,下面通过创建的EntryAbility代码来熟悉一下各个生命周期的使用场景。

import UIAbility from '@ohos.app.ability.UIAbility';
import hilog from '@ohos.hilog';
import window from '@ohos.window';

export default class EntryAbility extends UIAbility {
  onCreate(want, launchParam) { //应用初始化
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  }

  onDestroy() {//页面销毁
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }

  onWindowStageCreate(windowStage: window.WindowStage) {     //设置ui页面加载,设置windosstage的事件订阅
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');

    windowStage.loadContent('pages/Index', (err, data) => {
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
    });
  }

  onWindowStageDestroy() { //注销windosstage的事件订阅
    // Main window is destroyed, release UI related resources
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }

  onForeground() {//申请资源,如开启定位
    // Ability has brought to foreground
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  }

  onBackground() {//释放资源,状态保存,如关闭定位
    // Ability has back to background
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }
}

启动模式

UIAbility同安卓的Activity一样,包含四种启动模式,分别是"standard","singleton","multiton","specified",四种,可以在module.json5文件内,通过launchType设置。下面具体来说每一种启动模式的使用场景:

singleton(单实例模式)

当用户打开浏览器或者新闻等应用,并浏览访问相关内容后,回到桌面,再次打开该应用,显示的仍然是用户当前访问的界面。

这种情况下可以将UIAbility配置为singleton(单实例模式)。每次调用startAbility()方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用系统中的UIAbility实例,系统中只存在唯一一个该UIAbility实例。

即在最近任务列表中只存在一个该类型的UIAbility实例。

multiton(多实例模式)

用户在使用分屏功能时,希望使用两个不同应用(例如备忘录应用和图库应用)之间进行分屏,也希望能使用同一个应用(例如备忘录应用自身)进行分屏。

这种情况下可以将UIAbility配置为multiton(多实例模式)。每次调用startAbility()方法时,都会在应用进程中创建一个该类型的UIAbility实例。

即在最近任务列表中可以看到有多个该类型的UIAbility实例。

specified(指定实例模式)

用户打开文档应用,从文档应用中打开一个文档内容,回到文档应用,继续打开同一个文档,希望打开的还是同一个文档内容;以及在文档应用中新建一个新的文档,每次新建文档,希望打开的都是一个新的空白文档内容。

这种情况下可以将UIAbility配置为specified(指定实例模式)。在UIAbility实例新创建之前,允许开发者为该实例创建一个字符串Key,新创建的UIAbility实例绑定Key之后,后续每次调用startAbility方法时,都会询问应用使用哪个Key对应的UIAbility实例来响应startAbility请求。如果匹配有该UIAbility实例的Key,则直接拉起与之绑定的UIAbility实例,否则创建一个新的UIAbility实例。运行时由UIAbility内部业务决定是否创建多实例。

standard(默认实例模式) 

不同于第一种单例,即每次调用startAbility()方法时,系统都会生成一个该UIAbility实例


http://www.niftyadmin.cn/n/5162105.html

相关文章

宠物领养系统jsp+servlet+mysql

设计不同用户的操作权限、注册和登录方法。 管理员可以在管理员管理、用户管理、宠物管理、评论管理、团队活动管理、志愿者的申请等等模块中进行查询、添加、删除、修改。 管理员可以在领养管理中通过领养时间查询所有宠物被领养的信息,修改是否同意领养宠物&#…

《网络协议》03. 传输层(TCP UDP)

title: 《网络协议》03. 传输层(TCP & UDP) date: 2022-09-04 22:37:11 updated: 2023-11-08 15:58:52 categories: 学习记录:网络协议 excerpt: 传输层、UDP、TCP(可靠传输,流量控制,拥塞控制&#xf…

客服系统本地部署:实现高效客户服务

在当今的数字化时代,客户服务已成为企业成功的关键因素之一。为了提供优质、高效的服务,许多企业选择将客服系统本地部署。这种部署方式具有许多优势,如提高响应速度、保障数据安全、提升客户满意度等。 一、客服系统本地部署的概念 客服系统…

Hypervisor Platform无法执行xmm寄存器fpu指令sse解决方法

先设置cr4的这些位 #define CR4_OSXSAVE_MASK (1U << 18) #define CR4_OSFXSR_SHIFT 9 #define CR4_OSFXSR_MASK (1U << CR4_OSFXSR_SHIFT) #define CR4_OSXMMEXCPT_MASK (1U << 10)RegisterName WHvX64RegisterCr4;uint64_t cr4val 0;whpx_get_reg(Regist…

高压开关柜无线测温技术研究现状

开关柜是电力系统中输配电过程中不可缺少的&#xff0c;能够起到保护用电设备等作用&#xff0c;开关柜安全事故起因多为电缆接头、断路器动静触头等位置的虚接、材料老化、磨损、过载等原因造成接触电阻过大&#xff0c;运行中过热&#xff0c;最后导致绝缘烧损&#xff0c;形…

C盘清理指南(四)——垃圾清理工具

往期目录集合&#xff1a; C盘清理指南&#xff08;一&#xff09; 内存小的本质原因https://blog.csdn.net/jsl123x/article/details/134273657?spm1001.2014.3001.5501C盘清理指南&#xff08;二&#xff09;——盘符划分操作https://blog.csdn.net/jsl123x/article/detail…

使用LogBack替换Log4j

目录 1.删除log4j有关的依赖&#xff0c;添加logBack依赖 2.删除log4j配置文件&#xff0c;增加logback.xml配置文件 3.更改application.yml配置文件&#xff0c;log文件指向logback.xml 4.重启 1.删除log4j有关的依赖&#xff0c;添加logBack依赖 <dependency><gr…

MongoDB脑裂恢复

MongoDB脑裂恢复 故障现象故障处理 故障现象 此环境为3台MongoDB搭建副本集&#xff0c;其中两台mongodb由于外部原因导致服务异常&#xff0c;目前副本集只存活一台&#xff0c;且为从库。 故障处理 将已经宕机或暂时无法恢复的mongodb节点&#xff0c;优先级和投票权都设置…