【高心星出品】
UIAbility跳转
UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,包括应用内的其他UIAbility、或者其他应用的UIAbility(例如启动三方支付UIAbility)。
发起跳转
以下的案例将要实现:EntryAbility加载的index页面中文本,点击之后跳转到EntryAbility1加载的index1页面中。
可以在后台看到两个任务窗口。
index页面代码
typescript
import { common, Want } from '@kit.AbilityKit';
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
private context:common.UIAbilityContext=getContext(this) as common.UIAbilityContext
build() {
RelativeContainer() {
Text(this.message)
.id('HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(()=>{
let want:Want={
// 包名
bundleName:'com.gxx.uiabilitydemo',
// ability名字
abilityName:'EntryAbility1',
// 携带参数
parameters:{
name:'gxx'
}
}
// 启动跳转
this.context.startAbility(want)
})
}
.height('100%')
.width('100%')
}
}
Ability的启动模式
UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式:
- singleton(单实例模式)
- multiton(多实例模式)
- specified(指定实例模式)
在这里我们只介绍前两种常用启动模式。
singleton启动模式
singleton启动模式为单实例模式,也是默认情况下的启动模式。
每次调用startAbility()方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用系统中的UIAbility实例。系统中只存在唯一一个该UIAbility实例,即在最近任务列表中只存在一个该类型的UIAbility实例。
生命周期函数调用顺序:startAbility(EntryAbility)----》onNewWant()(EntryAbility1)不会执行oncrate。
需要在module.json5配置单例启动模式。
javascript
{
"module": {
// ...
"abilities": [
{
"launchType": "singleton",
// ...
}
]
}
}
multiton启动模式
multiton启动模式为多实例模式,每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例。即在最近任务列表中可以看到有多个该类型的UIAbility实例。这种情况下可以将UIAbility配置为multiton(多实例模式)。
生命周期函数调用顺序:startAbility(EntryAbility)----》oncreate()(EntryAbility1)不会执行onNewWant()周期函数。
需要在module.json5配置多实例启动模式。
javascript
{
"module": {
// ...
"abilities": [
{
"launchType": "multiton",
// ...
}
]
}
}