Stage模型

1、Stage模型介绍

  • HarmonyOS 3.1(API 9)新增模型。
  • 提供了Ability Stage和Window Stage类作为应用组件和window窗口的“舞台”

2、Stage模型的Ability生命周期

  • Ability的生命周期包括 create,Foreground,Background,Destroy四个状态
  • WindowStageCreate和WindowStage Destroy为窗口管理器(WindowStage)在Ability中管理UI界面功能的两个生命周期。

配置第8页面的图

3、Stage模型Ability启动模式

3.1、singleton(单实例模型)
  • singleton是默认情况下的启动模式
  • 每次调用startAbility()方法时,如果应用进程中该类型的Ability实例已经存在,则复用系统的Ability实例,系统中只会存在唯一一个该Ability对象,即在最近任务列表中存在一个该类型的Ability实例。此时,应用的Ability实例已经创建,当再次调用start Ability()方法启动该Ability实例时,只会进入该Ability的onNextWant()回调,不会进入onCreate()和onWindowStageCreate()生命周期回调
  • 进行配置,将model.json5配置文件的launchType字段进行配置
"module": {
  ...
  "abilities": [
    {
        "launchType": "singleton",
    }
    ]
  }

3.2、standard(标准实例模型)
  • 在standard启动模式下,每次调用start Ability()方法时,都会在应用进程中创建一个新的该类型的Ability实例,即在最近任务列表中可以看到多个该类型的Ability实例
3.3、specified(指定实例模型)
  • 在specified启动模式下,在Ability实例创建之前,允许开发者为该实例创建一个唯一的字符串key,创建的Ability实例绑定key之后,后续每次调用startAbility()方法时,都会询问应用使用哪个key对应的Ability实例来响应start Ability请求。运行时由Ability内部业务决定是否创建多个实例,如果匹配有该Ability实例的key,则直接拉起与之绑定的Ability实例,否则创建一个新的Ability实例。
  • 例如,用户在应用中重复打开一个文档时,启动的均是最近任务列表中的同一个任务,以及在应用中重复新建文档时,启动的均是最近任务列表中的新任务。这种情况下,可以将Ability配置为specified。当再次调用startAbility()方法启动该Ability实例,且Ability Stage的onAcceptWant()回调匹配到一个已经创建的Ability实例时,再次启动该Ability,只会进入该Ability的onNewWant()回调,不会进入其onCreate() 和 onWindowStageCreate()生命周期回调

4、Ability内页面的跳转和数据传递

4.1、页面跳转
  • 页面间的导航可以通过route模块来实现,页面路由模块根据页面URL找到目标页面,从而实现跳转。通过页面路由模块,可以使用不同的URL访问不同的页面,包括跳转到Ability内指定页面
4.1.1、route.pushUrl()
  • 通过调用route.push()方法,跳转到Aility内的指定页面,每调用一次route.push()都会新建一个页面,默认情况下,页面栈数量会增加1,页面栈支持最大页面数量为32。
  • 当页面站数量较大或者超过32时,可以通过route.clean()方法清除页面栈中的所有历史页面,仅保留当前页面作为栈顶页面
.onClick(() =>{
  router.pushUrl({
    url:'pages/SecondPage',
    params:{
        src:'第一个页面传递的值'
    }
  })
4.1.2、route.pushUrl()加mode参数
  • route.pushUrl()方法新增mode参数,可以将mode参数设置为routerRouterMode.Single单实例模式和routerRouterMode.Standard标准模式。
  • 在单实例模式下,如果目标页面在页面栈中已经存在同URL的页面,离栈顶最近的URL的页面会被移动到栈顶,移动后的页面为新建页面,原来的页面仍然保存在栈中。页面栈数量不变;如果目标页面在页面栈中不存在URL的页面,那么按照标准模式跳转,页面栈数量会加1。
.onClick(() =>{
  router.pushUrl({
    url:'pages/SecondPage',
    params:{
        src:'第一个页面传递的值'
    }
  },router.RouterMode.Single)
})
4.1.3、route.replaceUrl()
  • 通过调用route.placeUrl()方法,跳转到Ability内的指定页面,将使用新的页面替换当前页面,并销毁被替换的当前页面,页面的数量不变
.onClick(() => {
  router.replaceUrl({
    url:'pages/SecondPage',
    params:{
      src:'第一个页面传递的值'
    }
  })
})
4.1.4、route.replaceUrl()加mode参数
  • route.replaceUrl()方法新增mode参数,可以将mode参数设置为routerRouterMode.Single单实例模式和routerRouterMode.Standard标准模式。
  • 在单实例模式下,如果目标页面在页面栈中已经存在同URL的页面,离栈顶最近的URL的页面会被移动到栈顶,替换当前的页面。并销毁被替换的页面,移动后的页面为新建页面,页面栈数量会减1;如果目标页面在页面栈中不存在URL的页面,那么按照标准模式跳转,页面栈数量会保持不变。
.onClick(() => {
  router.replaceUrl({
    url:'pages/SecondPage',
    params:{
      src:'第一个页面传递的值'
    }
  },router.RouterMode.Standard)
})
4.2、接收参数

通过router.getParams()方法接收传递的值

@State message: string = router.getParams()?.['src'];

相关推荐

  1. Stage模型

    2024-06-18 23:50:01       30 阅读
  2. HarmonyOS Stage模型 权限申请

    2024-06-18 23:50:01       57 阅读
  3. 【HarmonyOS】Stage 模型 - UIAbility 的启动模式

    2024-06-18 23:50:01       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 23:50:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 23:50:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 23:50:01       82 阅读
  4. Python语言-面向对象

    2024-06-18 23:50:01       91 阅读

热门阅读

  1. 正规式理解

    2024-06-18 23:50:01       26 阅读
  2. 一文看懂E2PROM、FLASH等芯片,软件开发

    2024-06-18 23:50:01       28 阅读
  3. Vue3源码【三】—— createApp执行流程源码分析

    2024-06-18 23:50:01       21 阅读
  4. 华为安全Security认证,你了解多少?

    2024-06-18 23:50:01       27 阅读
  5. MySQL常用函数

    2024-06-18 23:50:01       34 阅读
  6. 智能车联网安全发展形势、挑战

    2024-06-18 23:50:01       35 阅读
  7. Spring Cloud Gateway 概述与基本配置(下)

    2024-06-18 23:50:01       33 阅读
  8. 异常处理总结

    2024-06-18 23:50:01       28 阅读
  9. AQS和同步器工具类

    2024-06-18 23:50:01       25 阅读