HarmonyOS学习(一)——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'];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值