【鸿蒙实战开发】UIAbility组件的启动模式

23 篇文章 0 订阅
23 篇文章 0 订阅

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 ,不定期分享原创知识。
在这里插入图片描述

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值