当前位置: 首页 > news >正文

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/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%A1%86%E6%9E%B6%E4%B8%AD%E5%88%9D%E5%A7%8B%E5%8C%96HMRouter#%E5%90%AF%E5%8A%A8%E6%A1%86%E6%9E%B6%E5%88%9D%E5%A7%8B%E5%8C%96hmrouter

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

相关文章:

  • 箭头函数和普通函数的this指向
  • 图像测试点列表
  • 【已解决】MACOS M4 芯片使用 Docker Desktop 工具安装 MICROSOFT SQL SERVER
  • Vim 设置搜索高亮底色
  • HBuilder 发行Android(apk包)全流程指南
  • thinkphp8.1 调用巨量广告API接口,刷新token
  • android 之 Tombstone
  • Win10停更,Win11不好用?现在Mac电脑比Win11电脑更便宜
  • RPA+AI:自动化办公机器人开发指南
  • Postman接口测试之postman设置接口关联,实现参数化
  • 第三章:栈与队列
  • Linux C学习路线全概及知识点笔记2(仅供个人参考)
  • OGG-01635 OGG-15149 centos服务器远程抽取AIX oracle11.2.0.4版本
  • 曼昆《经济学原理》(第9版)微观经济学第二章第一节作为科学家的经济学家
  • CVE-2020-17518源码分析与漏洞复现(Flink 路径遍历)
  • Mysql主从复制原理分析
  • c++ 基于openssl MD5用法
  • LeetCode 461.汉明距离
  • AWS 亚马逊 S3存储桶直传 前端demo 复制即可使用
  • 数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
  • 一个网站的建设步骤是/友妙招链接
  • 品牌建设 凝心/360优化大师历史版本
  • 怎么用asp做网站/谷歌广告怎么投放
  • 福州建设厅网站/百度知道推广软件
  • 甘肃建设项目审批权限网站/今日新闻最新头条10条内容
  • 公司网站设计思路/视频优化是什么意思