鸿蒙学记-002

126 阅读2分钟

UIAbility

什么是UIAbility

UIAbility:是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。 每一个UIAbility实例,都对应一个最近任务列表中的任务 应用的几种进入方式 1、桌面点击应用图标 2、应用间跳转 3、调度器切换 注意:一个应用可以有一个UIAbility实例,也可以有多个,建议将一个独立的功能模块放到一个UIAbility中,以多页面的形式展示,例如新闻应用在浏览内容的时候,可以进行多页面的跳转使用

页面跳转传参

方式一:API9及以上,router方法新增了mode参数,可以将mode参数配置为单例模式router.RouterMode.Single和多实例模式router.RouterMode.Standard 在单例模式下:如果目标页面的URL在页面栈中已经存在同URL页面,离栈顶最近同URL页面会被移动到栈顶,移动后的页面作为新建页, 原来的页面仍然存在栈中,页面栈的元素数量不变。如果目标页面URL在页面中不存在同URL页面,按多实例模式跳转,页面栈元素数量加一。 注意:页面数超过32时或者自己感觉多了,打算直接返回顶部,可以通过router.clear()方法清空页面栈,仅保留当前页面作为栈顶页面。 方式二:API9及以上,router.replaceUrl()方法新增了mode参数,可以将mode参数配置为router.RouterMode.Single单实例模式和router.RouterMode.Standard多实例模式。 在单实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近同url页面会被移动到栈顶,替换当前页面,并销毁被替换的当前页面,移动后的页面为新建页,页面栈的元素数量会减1;如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数量不变。 页面A

Text(this.demo3)  
  .fontSize(25)  
  .fontWeight(FontWeight.Bold)  
  .onClick(() => {  
    router.pushUrl({  
      url: 'pages/RouteParamPage',  
      params: {  
        pageId : 'abc001'  
      }  
    })  
  })

页面B

export struct SecondPageDetailComponent {  
  @State routeParam: string = router.getParams()?.['pageId']  
  build() {  
    Column() {  
      Row() {  
        Image($r('app.media.ic_public_back'))  
          .width(24)  
          .height(24)  
          .margin({left:20, right: 20, top: 20, bottom: 20})  
          .align(Alignment.Start)  
          .onClick(() => {  
            router.back()  
          })  
        Text('路由参数')  
          .fontSize(30)  
          .fontWeight(400)  
      }      .width('100%')  
      Text(this.routeParam)  
        .fontSize(20)  
    }    .width('100%')  
    .height('100%')  
  
  }  
}

UIAbility生命周期

Pasted image 20240205140743.png

UIAbility的启动模式

UIAbility当前支持singleton(单实例模式,也是默认的)、multiton(多实例模式)和specified(指定实例模式)3种启动模式。 启动模式在module.json5配文件中的launchType字段进行设置