HarmonyOS:如何在启动框架中初始化HMRouter

应用启动时通常需要执行一系列初始化启动任务,如果将启动任务都放在应用主模块(即entry类型的Module)的UIAbility组件的onCreate生命周期中,那么只能在主线程中依次执行,不但影响应用的启动速度,而且当启动任务过多时,任务之间复杂的依赖关系还会使得代码难以维护。

AppStartup提供了一种简单高效的应用启动方式,可以支持任务的异步启动,加快应用启动速度。同时,通过在一个配置文件中统一设置多个启动任务的执行顺序以及依赖关系,让执行启动任务的代码变得更加简洁清晰、容易维护。

启动框架支持以自动模式或手动模式执行启动任务,默认采用自动模式。在构造AbilityStage组件容器过程中开始加载开发者配置的启动任务,并执行自动模式的启动任务。开发者也可以在UIAbility创建完后调用startupManager.run方法,执行手动模式的启动任务。

官方链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-startup-V5

HMRouter链接介绍:

https://gitee.com/hadss/hmrouter/wikis/如何在启动框架中初始化HMRouter#启动框架初始化hmrouter

启动框架简介

AppStartup提供了一种简单高效的应用启动方式,可以支持任务的异步启动,加快应用启动速度。同时,通过在一个配置文件中统一设置多个启动任务的执行顺序以及依赖关系,让执行启动任务的代码变得更加简洁清晰、容易维护。启动框架详细使用请参考官网,本文仅介绍如何在启动框架初始化HMRouter

应用启动框架AppStartup-Stage模型应用组件-Stage模型开发指导-Ability Kit(程序框架服务)-应用框架 - 华为HarmonyOS开发者 (huawei.com)

  1. 启动框架初始化HMRouter
    2.1 支持版本
    支持1.0.0-rc.4以上版本,如果想要在启动框架中初始化HMRouter,请升级到这个版本

2.2 使用启动框架

2.2.1 定义启动框架配置文件

在应用主模块(即entry类型的Module)的"resources/base/profile"路径下,新建启动框架配置文件。文件名可以自定义,本文以"startup_config.json"为例,此处注意,runOnThread的值必须配置为mainThread,配置为taskPool会导致页面无法正常加载。,waitOnMainThread推荐配置为true,配置为false可能会导致首页异常

复制代码
{
  "startupTasks": [
    {
      "name": "HMRouterInitStartupTask",
      "srcEntry": "./ets/startup/HMRouterInitStartupTask.ets",
      "runOnThread": "mainThread",
      "waitOnMainThread": true
    }
  ],
  "configEntry": "./ets/startup/StartupConfig.ets"
}

2.2.2.2 设置启动参数

在"ets/startup/StartupConfig.ets"中设置启动参数,可参考官网启动参数配置

复制代码
import { StartupConfig, StartupConfigEntry, StartupListener } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

export default class MyStartupConfigEntry extends StartupConfigEntry {
  onConfig() {
    hilog.info(0x0000, 'testTag', `onConfig`);
    let onCompletedCallback = (error: BusinessError<void>) => {
      hilog.info(0x0000, 'testTag', `onCompletedCallback`);
      if (error) {
        hilog.info(0x0000, 'testTag', 'onCompletedCallback: %{public}d, message: %{public}s', error.code,
          error.message);
      } else {
        hilog.info(0x0000, 'testTag', `onCompletedCallback: success.`);
      }
    };
    let startupListener: StartupListener = {
      'onCompleted': onCompletedCallback
    };
    let config: StartupConfig = {
      'timeoutMs': 10000,
      'startupListener': startupListener
    };
    return config;
  }
}

2.2.2.3 为HMRouter添加启动任务

在"src/main/ets/startup/HMRouterInitStartupTask.ets"中添加启动任务,初始化HMRouter

复制代码
import { HMRouterMgr } from '@hadss/hmrouter';
import { StartupTask, common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

@Sendable
export default class HMRouterInitStartupTask extends StartupTask {
  constructor() {
    super();
  }

  async init(context: common.AbilityStageContext) {
      // add task to init HMRouter
    HMRouterMgr.init({
      context: context
    })
    HMRouterMgr.openLog('DEBUG')
  }

  onDependencyCompleted(dependence: string, result: Object): void {
    hilog.info(0x0000, 'testTag', 'HMRouterInitStartupTask onDependencyCompleted, dependence: %{public}s, result: %{public}s',
      dependence, JSON.stringify(result));
  }
}

这些代码完全可以复制使用的,其实就是按照官方的启动初始化实现的,但是这里我亲自试了,缺少一个配置,无法启动,官方的介绍里面有,需要在module.json5配置文件的appStartup标签中,添加启动框架配置文件的索引。

module.json5示例代码如下。

复制代码
{
  "module": {
    "name": "entry",
    "type": "entry",
    // ...
    "appStartup": "$profile:startup_config", // 启动框架的配置文件
    // ...
  }
}

这样就可以完美实现在启动框架中初始化HMRouter了,当然其他的三方库,你也可以采用这种思路实现初始化。

相关推荐
lbb 小魔仙2 小时前
【HarmonyOS实战】React Native 表单实战:在 OpenHarmony 上构建高性能表单
react native·华为·harmonyos
一只大侠的侠5 小时前
React Native开源鸿蒙跨平台训练营 Day16自定义 useForm 高性能验证
flutter·开源·harmonyos
早點睡3906 小时前
高级进阶 React Native 鸿蒙跨平台开发:@react-native-community-slider 滑块组件
react native·react.js·harmonyos
一只大侠的侠6 小时前
Flutter开源鸿蒙跨平台训练营 Day11从零开发商品详情页面
flutter·开源·harmonyos
一只大侠的侠7 小时前
React Native开源鸿蒙跨平台训练营 Day18自定义useForm表单管理实战实现
flutter·开源·harmonyos
一只大侠的侠7 小时前
React Native开源鸿蒙跨平台训练营 Day20自定义 useValidator 实现高性能表单验证
flutter·开源·harmonyos
听麟8 小时前
HarmonyOS 6.0+ 跨端智慧政务服务平台开发实战:多端协同办理与电子证照管理落地
笔记·华为·wpf·音视频·harmonyos·政务
前端世界8 小时前
从单设备到多设备协同:鸿蒙分布式计算框架原理与实战解析
华为·harmonyos
一只大侠的侠9 小时前
Flutter开源鸿蒙跨平台训练营 Day12从零开发通用型登录页面
flutter·开源·harmonyos
前端不太难10 小时前
HarmonyOS App 工程深水区:从能跑到可控
华为·状态模式·harmonyos