UIAbility组件的启动模式
UIAbility 启动模式主要分为四种 如下:
1.singleton(单实例模式)
2.multiton(新的单实例模式)
3.standard(多实例模式)
4.specified(指定实例模式)
跳转代码如下:
1、首先需要配置Ability的启动模式
在项目中找到module.json5配置文件中的"launchType"字段配置启动模式,如下:
{
"module": {
// 对应的ability
"abilities": [
{
"launchType": "singleton", //singleton(单实例模式),multiton(新的单实例模式),standard(多实例模式),specified(指定实例模式)默认为singleton
// ...
}
]
}
}
2、配置Want 如下:
主要时 Want 这个参数,这个三个参数时必不可少的,最少满足这三个参数才能跳转
// singleton模式特点:(单实例模式)
// 系统中只存在唯一一个该UIAbility实例,
// 在创建该模型时,如果应用进程中该类型的UIAbility实例已经存在,这会复用改实例,不会创建新的实例
Button('跳转').onClick((event: ClickEvent) => {
// 注意:至少有这三个参数
let want: Want = {
deviceId: '', // 空表示当前设备设备
bundleName: 'com.example.helloword',
abilityName: '***Ability'
}
this.context.startAbility(want)
})
3、执行 context.startAbility(wan)完成跳转
四个启动模式的区别 :
1、singleton启动模式
singleton启动模式为单实例模式,也是默认情况下的启动模式。
每次调用startAbility()方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用系统中的UIAbility实例。系统中只存在唯一一个该UIAbility实例,即在最近任务列表中只存在一个该类型的UIAbility实例。
2、multiton启动模式
官网描述:multiton启动模式为多实例模式,每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例。即在最近任务列表中可以看到有多个该类型的UIAbility实例。这种情况下可以将UIAbility配置为multiton(多实例模式)。
实际上:这个启动模式类似于singleton 它在系统中也只存在唯一一个该UIAbility实例,不同点是当UIAbility存在时 再次调用startAbility方法时,它会替换原来的UIAbility实例,并且会重新走onCreate和onWindowStateCreate生命周期。
3、standard启动模式
standard启动模式为多实例模式,每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例。即在最近任务列表中可以看到有多个该类型的UIAbility实例。
4、specified启动模式 这个比较特殊
当我们要是实现打开多个文档进行编辑退出且界面不会被销毁就可以使用这个模式,具体实现如下
4.1、创建UIAbitlity
4.2、设置UIAbitlity启动模式
4.3、创建Stage
4.4、关键一步需要在 module.json5文件中配置stage
4.5、布局如下:
import Want from '@ohos.app.ability.Want'
import { GlobalContext } from '../common/GlobalContext'
@Entry
@Component
struct AbilityPage {
build() {
Column(){
List(){
ForEach([1,2,3],(item,index)=>{
ListItem(){
Text(`文档${index}`).padding(20)
.fontSize(20)
}
.width('100%')
.onClick(()=>{
let want: Want = {
deviceId: '',
bundleName: 'com.example.study',
abilityName: 'SpecifiedAbility',
parameters: { // 自定义信息
instanceKey: item
}
}
GlobalContext.get().getContext().startAbility(want)
})
})
}.alignListItem(ListItemAlign.Center)
}
.justifyContent(FlexAlign.Center)
}
}
@Entry
@Component
export struct DocumentPage {
@State message: string = 'Hello World'
build() {
Row() {
Column() {
TextInput()
}
.width('100%')
}
.height('100%')
}
}
这个模式的好处是,当你再打开文档界面时不会再走并且会重新走onCreate和onWindowStateCreate生命周期,只会执行
onForeground(),onBackground()两个方法实现前后台的切换
总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。随着鸿蒙的不断发展以及国家的大力支持,未来鸿蒙职位肯定会迎来一个大的爆发,只有积极应对变化,不断学习和提升自己,我们才能在这个变革的时代中立于不败之地。
写在最后
●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我两个小忙:
●点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
●关注小编,同时可以期待后续文章ing ,不定期分享原创知识。