概述

UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互
UIAbility是系统调度的单元,为应用提供窗口在其中绘制界面

应用程序的几种交互界面形式

  • 点击桌面图标进入应用
    鸿蒙(HarmonyOS)应用开发——应用程序入口UIAbility-LMLPHP

  • 一个应用拉起另一个应用
    鸿蒙(HarmonyOS)应用开发——应用程序入口UIAbility-LMLPHP

  • 最近任务列表切回应用
    鸿蒙(HarmonyOS)应用开发——应用程序入口UIAbility-LMLPHP
    每一个UI Ability实例,都对应于一个最近任务列表中的任务

UIAbility 内的页面创建

创建project,选择empty Ability
鸿蒙(HarmonyOS)应用开发——应用程序入口UIAbility-LMLPHP
在pages 文件下,新建page
鸿蒙(HarmonyOS)应用开发——应用程序入口UIAbility-LMLPHP

页面间的跳转和数据传递

页面跳转

页面的跳转需要导入router路由模块

import router from ‘@ohos.router’

通过调用 router.pushUrl() 方法

页面跳转的几种方式,根据需要选择一种方式跳转即可。

  • 方式一:API9及以上,router.pushUrl()方法新增了mode参数,可以将mode参数配置为router.RouterMode.Single单实例模式和router.RouterMode.Standard多实例模式。
    在单实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近同url页面会被移动到栈顶,移动后的页面为新建页,原来的页面仍然存在栈中,页面栈的元素数量不变;如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数量会加1。
router.pushUrl({
  url: 'pages/Second'
})
  • 方式二:API9及以上,router.replaceUrl()方法新增了mode参数,可以将mode参数配置为router.RouterMode.Single单实例模式和router.RouterMode.Standard多实例模式。
    在单实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近同url页面会被移动到栈顶,替换当前页面,并销毁被替换的当前页面,移动后的页面为新建页,页面栈的元素数量会减1;如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数量不变。
router.replaceUrl({
  url: 'pages/Second'
})

参数传递

在上述页面的跳转中,使用params 传递参数

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

接收参数

在跳转的页面如何接收呢,使用route.getParams方法

 @State src: string = (router.getParams() as Record<string, string>)['src'];

页面返回和参数接收

页面返回

使用router.back()
调用router.back()返回的目标页面需要在页面栈中存在才能正常跳转

  • 默认情况是使用的 router.back()
  • 返回指定页面 router.back({url:‘’})

返回参数

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

返回操作不会触发页面的aboutToAppear()函数,但是对于@Entry 修饰的,可以使用onPageShow()函数

生命周期

当用户浏览、切换和返回到对应应用的时候,应用中的UIAbility实例会在其生命周期的不同状态之间转换。
UIAbility类提供了很多回调,通过这些回调可以知晓当前UIAbility的某个状态已经发生改变:例如UIAbility的创建和销毁,或者UIAbility发生了前后台的状态切换。

  • Create状态,在UIAbility实例创建时触发,系统会调用onCreate回调。可以在onCreate回调中进行相关初始化操作。
import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';

export default class EntryAbility extends UIAbility {
    onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
        // 应用初始化
        ...
    }
    ...
}
  • Foreground和Background状态,分别在UIAbility切换至前台或者切换至后台时触发。
    分别对应于onForeground回调和onBackground回调。

  • Destroy状态,在UIAbility销毁时触发。可以在onDestroy回调中进行系统资源的释放、数据的保存等操作。

UIAbility 启动模式

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

对于应用的分屏操作,用户希望使用两个不同应用(例如备忘录应用和图库应用)之间进行分屏,也希望能使用同一个应用(例如备忘录应用自身)进行分屏。
对于文档应用,用户从文档应用中打开一个文档内容,回到文档应用,继续打开同一个文档,希望打开的还是同一个文档内容。

基于以上场景的考虑,UIAbility当前支持singleton(单实例模式)、multiton(多实例模式)和specified(指定实例模式)3种启动模式。

11-29 06:25