美文网首页
2024-02-21 UIAbility应用程序框架与路由管理

2024-02-21 UIAbility应用程序框架与路由管理

作者: 我是小胡胡123 | 来源:发表于2024-02-20 16:34 被阅读0次

UIAbility概念

一个应用可以有一个UIAbility,也可以有多个UIAbility
一个UIAbility可以对应于多个页面,建议将一个独立的功能模块放到一个UIAbility中,以多页面的形式呈现

45726-501969e9999b44d9.jpeg

配置UIAbility入口

./HelloWorld/entry/src/main/module.json5

UIAbility应用框架生命周期 和窗口管理之间的关系

为了实现多设备形态上的裁剪和多窗口的可扩展性,系统对组件管理和窗口管理进行了解耦。UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态,

WindowStageCreate和WindowStageDestroy为窗口管理器(WindowStage)在UIAbility中管理UI界面功能的两个生命周期回调,从而实现UIAbility与窗口之间的弱耦合。

UIAbility生命周期状态:


45726-46fca56111b5ee9f.jpeg

UIAbility第一个页面

UIAbility生命周期,在这个文件中实现:
./HelloWorld/entry/src/main/ets/entryability/EntryAbility.ts

使用窗口管理对象windowStage加载第一个页面

    windowStage.loadContent('pages/Index', (err, data) => {
    });

UIAbility窗口管理回调用的方法:

   /*窗口管理器(WindowStage)*/
  onWindowStageCreate(windowStage: window.WindowStage) {
    // 正在打游戏的时候,有一个消息通知,打开消息,消息会以弹窗的形式弹出在游戏应用的上方,
    // 此时,游戏应用就从获焦切换到了失焦状态,消息应用切换到了获焦状态
    //UI界面加载
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');


    //加载的页面
    /*实现UIAbility与窗口之间的弱耦合*/
    windowStage.loadContent('pages/Index', (err, data) => {
      if (err.code) {
        hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
        return;
      }
      hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
    });
  }

UIAbility路由管理

import router from '@ohos.router';

跳转新页面:

router.pushUrl()方法新增了mode参数,可以将mode参数配置为router.RouterMode.Single单实例模式和router.RouterMode.Standard多实例模式。

  • 在单实例模式下:
    如果目标页面的url在页面栈中已经存在同url页面,离栈顶最近同url页面会被移动到栈顶,移动后的页面为新建页,原来的页面仍然存在栈中,页面栈的元素数量不变;

  • 按多实例模式跳转:
    如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数量会加1。

 
        router.pushUrl({ url: 'pages/ToDoListPage', params: {
          src: '来自首页的数据'
        } }, router.RouterMode.Single);
 

返回上一个页面:

      router.back({
          url: 'pages/Index',

          //调用router.back()方法,不会新建页面,
          // 返回的是原来的页面,在原来页面中@State声明的变量不会重复声明,
          // 以及也不会触发页面的aboutToAppear()生命周期回调,
          // 因此无法直接在变量声明以及页面的aboutToAppear()生命周期回调中接收和解析
          // router.back()传递过来的自定义参数。
          params: {
            'result': '我是处理结果'
          }
        });

返回上一个页面之前添加询问弹窗:

        router.showAlertBeforeBackPage({ message: '确认关闭页面吗?' });
        router.back();

从返回页面获取结果

  onPageShow() {
    console.log('页面显示-onPageShow');
    try {
      this.result = (router.getParams() as RouterParams).result;
    } catch (e) {
      console.log(e);
    }
  }

UIAbility启动模式

对于浏览器或者新闻等应用,用户在打开该应用,并浏览访问相关内容后,回到桌面,再次打开该应用,显示的仍然是用户当前访问的界面。

对于应用的分屏操作,用户希望使用两个不同应用(例如备忘录应用和图库应用)之间进行分屏,也希望能使用同一个应用(例如备忘录应用自身)进行分屏。

对于文档应用,用户从文档应用中打开一个文档内容,回到文档应用,继续打开同一个文档,希望打开的还是同一个文档内容。

基于以上场景的考虑,UIAbility当前支持singleton(单实例模式)、multiton(多实例模式)和specified(指定实例模式)3种启动模式。

  • singleton(单实例模式)

singleton启动模式的开发使用,在module.json5文件中的“launchType”字段配置为“singleton”即可。

{
   "module": {
     // ...
     "abilities": [
       {
         "launchType": "singleton",
         // ...
       }
     ]
  }
}

最后的实例运行效果如下:


45726-4b9e7eea5c57d3b9.jpeg

相关文章

  • Flutter进阶:路由、路由栈详解及案例分析

    路由初体验 路由(Routes)是什么?路由是屏幕或应用程序页面的抽象。 Flutter 使我们能够优雅地管理路由...

  • Flutter路由栈和生命周期解析

    什么是路由 路由(Routes)是什么?路由是屏幕或应用程序页面的抽象。Flutter 使我们能够优雅地管理路由主...

  • Flutter 路由记录

    Flutter 路由管理中有两个非常重要的概念: Route:路由是应用程序页面的抽象,对应 Android 中 ...

  • flutter路由

    在Flutter中,导航器管理应用程序的路由栈。将路由推入(push)到导航器的栈中,将会显示更新为该路由页面。 ...

  • 微信小程序之页面路由

    页面路由 在小程序中所有页面的路由全部由框架进行管理。 页面栈 框架以栈的形式维护了当前的所有页面。 当发生路由切...

  • 【Flutter 实战】路由堆栈详解

    老孟导读:Flutter中路由是非常重要的部分,任何一个应用程序都离不开路由管理,此文讲解路由相关方法的使用和路由...

  • 组件化2.路由框架的设计

    路由框架原理 路由框架是为了实现组件之间的通信 路由框架维护了一个分组的路由表路由表中存放了路由地址和路由信息路由...

  • Express路由(二)

    Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架 概述路由用于确定应用程序如何...

  • fastapi路由管理

    fastapi路由管理,和GIN的框架思想一致。入口函数----主路由---控制器---服务 main入口函数,需...

  • wechat.scrm.public 公众号项目代码Review

    项目简介 车商通SCRM微信端 前端框架:Vue2 UI框架:museUI、YDUI 路由管理:vueRouter...

网友评论

      本文标题:2024-02-21 UIAbility应用程序框架与路由管理

      本文链接:https://www.haomeiwen.com/subject/mvbbadtx.html