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了,当然其他的三方库,你也可以采用这种思路实现初始化。

相关推荐
哼唧唧_1 小时前
React Native开发鸿蒙运动健康类应用的项目实践记录
react native·harmonyos·harmony os5·运动健康
二流小码农8 小时前
鸿蒙开发:实现一个标题栏吸顶
android·ios·harmonyos
坚果的博客9 小时前
uniappx插件nutpi-idcard 开发与使用指南(适配鸿蒙)
华为·harmonyos
程序员小刘9 小时前
【HarmonyOS 5】 社交行业详解以及 开发案例
华为·harmonyos
软件测试小仙女9 小时前
鸿蒙APP测试实战:从HDC命令到专项测试
大数据·软件测试·数据库·人工智能·测试工具·华为·harmonyos
Raink老师9 小时前
鸿蒙任务项设置案例实战
harmonyos·鸿蒙·案例实战
程序员小刘9 小时前
【HarmonyOS 5】 影视与直播详以及 开发案例
华为·harmonyos
程序员小刘9 小时前
鸿蒙【HarmonyOS 5】 (React Native)的实战教程
react native·华为·harmonyos
王二蛋与他的张大花9 小时前
HarmonyOS运动语音开发:如何让运动开始时的语音播报更温暖
harmonyos
Android研究员10 小时前
华为仓颉语言初识:并发编程之同步机制(上)
harmonyos