概述
UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互
UIAbility是系统调度的单元,为应用提供窗口在其中绘制界面
应用程序的几种交互界面形式
-
点击桌面图标进入应用
-
一个应用拉起另一个应用
-
最近任务列表切回应用
每一个UI Ability实例,都对应于一个最近任务列表中的任务
UIAbility 内的页面创建
创建project,选择empty Ability
在pages 文件下,新建page
页面间的跳转和数据传递
页面跳转
页面的跳转需要导入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种启动模式。