概述
UIAbility
组件是一种包含UI
的应用组件,主要用于和用户交互。
UIAbility
的设计理念:
- 原生支持应用组件级的跨端迁移和多端协同。
- 支持多设备和多窗口形态。
UIAbility
划分原则与建议:
UIAbility
组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility
组件。例如,在支付应用中,可以将入口功能和收付款功能分别配置为独立的UIAbility
。
每一个UIAbility
组件实例都会在最近任务列表中显示一个对应的任务。
对于开发者而言,可以根据具体场景选择单个还是多个UIAbility
,划分建议如下:
- 如果开发者希望在任务视图中看到一个任务,则建议使用一个
UIAbility
,多个页面的方式。 - 如果开发者希望在任务视图中看到多个任务,或者需要同时开启多个窗口,则建议使用多个
UIAbility
开发不同的模块功能。
UIAbility组件生命周期
当用户打开、切换和返回到对应应用时,应用中的UIAbility
实例会在其生命周期的不同状态之间转换。UIAbility
类提供了一系列回调,通过这些回调可以知道当前UIAbility
实例的某个状态发生改变,会经过UIAbility
实例的创建和销毁,或者UIAbility
实例发生了前后台的状态切换。
UIAbility
的生命周期包括Create、Foreground、Background、Destroy
四个状态,如下图所示。
Create
状态为在应用加载过程中,UIAbility
实例创建完成时触发,系统会调用onCreate()
回调。可以在该回调中进行页面初始化操作,例如变量定义资源加载等,用于后续的UI展示。
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// 页面初始化
}
}
Foreground
和Background
状态分别在UIAbility
实例切换至前台和切换至后台时触发,对应于onForeground()
回调和onBackground()
回调。
onForeground()
回调,在UIAbility
的UI可见之前,如UIAbility
切换至前台时触发。可以在onForeground()
回调中申请系统需要的资源,或者重新申请在onBackground()
中释放的资源。
onBackground()
回调,在UIAbility
的UI完全不可见之后,如UIAbility
切换至后台时候触发。可以在onBackground()
回调中释放UI不可见时无用的资源,或者在此回调中执行较为耗时的操作,例如状态保存等。
例如应用在使用过程中需要使用用户定位时,假设应用已获得用户的定位权限授权。在UI显示之前,可以在onForeground()
回调中开启定位功能,从而获取到当前的位置信息。
当应用切换到后台状态,可以在onBackground()
回调中停止定位功能,以节省系统的资源消耗。
import { UIAbility } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onForeground(): void {
}
onBackground(): void {
}
}
Destroy
状态在UIAbility
实例销毁时触发。可以在onDestroy()
回调中进行系统资源的释放、数据的保存等操作。
import { UIAbility } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onDestroy() {
}
}
UIAbility组件启动模式
UIAbility
的启动模式是指UIAbility
实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式:
- singleton(单实例模式)
- multiton(多实例模式)
- specified(指定实例模式)
singleton启动模式
singleton启动模式为单实例模式,也是默认情况下的启动模式。
每次调用startAbility()
方法时,如果应用进程中该类型的UIAbility
实例已经存在,则复用系统中的UIAbility
实例。系统中只存在唯一一个该UIAbility
实例,即在最近任务列表中只存在一个该类型的UIAbility
实例。
应用的UIAbility
实例已创建,该UIAbility
配置为单实例模式,再次调用startAbility()
方法启动该UIAbility
实例。由于启动的还是原来的UIAbility
实例,并未重新创建一个新的UIAbility
实例,此时只会进入该UIAbility
的onNewWant()
回调,不会进入其onCreate()
和onWindowStageCreate()
生命周期回调。
multiton启动模式
multiton启动模式为多实例模式,每次调用startAbility()
方法时,都会在应用进程中创建一个新的该类型UIAbility
实例。即在最近任务列表中可以看到有多个该类型的UIAbility
实例。这种情况下可以将UIAbility
配置为multiton(多实例模式)。
specified启动模式
specified启动模式为指定实例模式,针对一些特殊场景使用(例如文档应用中每次新建文档希望都能新建一个文档实例,重复打开一个已保存的文档希望打开的都是同一个文档实例)。