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

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

相关文章:

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

应用启动时通常需要执行一系列初始化启动任务&#xff0c;如果将启动任务都放在应用主模块&#xff08;即entry类型的Module&#xff09;的UIAbility组件的onCreate生命周期中&#xff0c;那么只能在主线程中依次执行&#xff0c;不但影响应用的启动速度&#xff0c;而且当启动…...

Ubuntu下有关UDP网络通信的指令

1、查看防火墙状态&#xff1a; sudo ufw status # Ubuntu 2、 检查系统全局广播设置 # 查看是否忽略广播包&#xff08;0表示接收&#xff0c;1表示忽略&#xff09; sysctl net.ipv4.icmp_echo_ignore_broadcasts# 查看是否允许广播转发&#xff08;1表示允许&#xff09…...

JavaWeb预习(jdbc)

基础 1.驱动程序接口Driver 每种数据库都提供了数据库驱动程序&#xff0c;并且都提供了一个实现java.sql.Driver接口的类&#xff0c;称为Driver 对于MySql&#xff0c;其Driver类为com.mysql.jdbc.Driver&#xff0c;加载该类的语句为&#xff1a; Class.forName("c…...

Web3 借贷与清算机制全解析:链上金融的运行逻辑

Web3 借贷与清算机制全解析&#xff1a;链上金融的运行逻辑 超额抵押借款 例如&#xff0c;借款人用ETH为抵押借入DAI&#xff1b;借款人的ETH的价值一定是要超过DAI的价值&#xff1b;借款人可以任意自由的使用自己借出的DAI 稳定币 第一步&#xff1a;借款人需要去提供一定…...

【Vue3】(三)vue3中的pinia状态管理、组件通信

目录 一、vue3的pinia 二、【props】传参 三、【自定义事件】传参 四、【mitt】传参 五、【v-model】传参&#xff08;平常基本不写&#xff09; 六、【$attrs】传参 七、【$refs和$parent】传参 八、provide和inject 一、vue3的pinia 1、什么是pinia&#xff1f; pinia …...

ingress-nginx 开启 Prometheus 监控 + Grafana 查看指标

环境已经部署了 ingress-nginx&#xff08;DaemonSet 方式&#xff09;&#xff0c;并且 Prometheus Grafana 也已经运行。但之前 /metrics 端点没有暴露 Nginx 核心指标&#xff08;如 nginx_ingress_controller_requests_total&#xff09;&#xff0c;经过调整后现在可以正…...

SQL进阶之旅 Day 21:临时表与内存表应用

【SQL进阶之旅 Day 21】临时表与内存表应用 文章简述 在SQL开发过程中&#xff0c;面对复杂查询、数据预处理和性能优化时&#xff0c;临时表和内存表是不可或缺的工具。本文深入讲解了临时表&#xff08;Temporary Table&#xff09;和内存表&#xff08;Memory Table&#x…...

Jenkins自动化部署Maven项目

Jenkins自动化部署Maven项目 一、环境准备(Prerequisites) SpringBoot项目 确保项目根目录有标准Maven结构(pom.xml)且包含Dockerfile: # Dockerfile 示例 FROM openjdk:11-jre-slim VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["j…...

LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上

题目&#xff1a;1667. 修复表中的名字 题解&#xff1a; select user_id, concat(upper(left(name,1)),lower(right(name,length(name)-1))) name from Users order by user_id题目&#xff1a;1527. 患某种疾病的患者 题解&#xff1a; select * from Patients where con…...

Python 中 Django 中间件:原理、方法与实战应用

在 Python 的 Web 开发领域&#xff0c;Django 框架凭借其高效、便捷和功能丰富的特点备受开发者青睐。而 Django 中间件作为 Django 框架的重要组成部分&#xff0c;犹如 Web 应用的 “交通枢纽”&#xff0c;能够在请求与响应的处理流程中&#xff0c;实现对请求和响应的拦截…...

深入浅出玩转物联网时间同步:基于BC260Y的NTP实验与嵌入式仿真教学革命

在万物互联的时代&#xff0c;精准的时间戳是物联网系统的神经节拍器&#xff0c;而NTP协议正是维持这一节律的核心技术。 一、时间同步&#xff1a;物联网世界的隐形基石 在智慧城市、工业4.0等场景中&#xff0c;分散的设备需要毫秒级的时间协同。网络时间协议&#xff08;N…...

数学建模期末速成 主成分分析的基本步骤

设有 n n n个研究对象&#xff0c; m m m个指标变量 x 1 , x 2 , ⋯ , x m x_1,x_2,\cdots,x_m x1​,x2​,⋯,xm​&#xff0c;第 i i i个对象关于第 j j j个指标取值为 a i j a_{ij} aij​,构造数据矩阵 A ( a i j ) n m A\left(\begin{array}{c}a_{ij}\end{array}\right)_{…...

视频音频去掉开头结尾 视频去掉前n秒后n秒 电视剧去掉开头歌曲

视频音频去掉开头结尾 视频去掉前n秒后n秒 视频音频去掉开头结尾 视频去掉前n秒后n秒 电视剧去掉开头歌曲 如果你有一些视频或者音频&#xff0c;你想去掉开头或结尾的几秒钟&#xff0c;那么你可以尝试一下这个工具&#xff0c;首先&#xff0c;我们来看一下&#xff0c;我们以…...

【在线五子棋对战】二、websocket 服务器搭建

文章目录 Ⅰ. WebSocket1、简介2、特点3、原理解析4、报文格式 Ⅱ. WebSocketpp1、认识2、常用接口3、websocketpp库搭建服务器搭建流程主体框架填充回调函数细节 4、编写 makefile 文件5、websocket客户端 Ⅰ. WebSocket 1、简介 WebSocket 是从 HTML5 开始支持的一种网页端…...

C++课设:从零开始打造影院订票系统

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏介绍&#xff1a;《编程项目实战》 目录 一、项目背景与需求分析二、系统架构设计…...

【计算机网络】数据链路层-滑动窗口协议

数据链路层滑动窗口协议 1. 三种协议对比表 特性停止-等待协议GBN协议SR协议窗口大小发送 1&#xff0c;接收 1发送 W (1<W≤2ⁿ-1)&#xff0c;接收 1发送 C&#xff0c;接收 R确认方式单个确认累积确认选择性确认重传策略超时重传回退N帧重传选择性重传接收缓冲区…...

在linux系统上,如何安装Elasticsearch?

1.问题描述 当尝试连接时报错&#xff0c;报错内容为&#xff1a; elastic_transport.ConnectionError: Connection error caused by: ConnectionError(Connection error caused by: NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7fd808b179d0>:…...

wpf Behaviors库实现支持多选操作进行后台绑定数据的ListView

<ListView ItemsSource"{Binding SchemeItems}" SelectionMode"Extended" VerticalAlignment"Stretch" HorizontalAlignment"Stretch"><ListView.ContextMenu><ContextMenu><MenuItem Header"删除" …...

【HarmonyOS 5】拍摄美化开发实践介绍以及详细案例

以下是 HarmonyOS 5 拍摄美化功能的简洁介绍&#xff0c;整合核心能力与技术亮点&#xff1a; 一、AI 影像创新 ‌AI 魔法移图‌ 系统级图像分层技术实现人物/物体自由拖拽、缩放与复制&#xff0c;突破传统构图限制。自动分离主体与背景&#xff0c;一键生成错位创意照&…...

《Vuejs设计与实现》第 8 章(挂载与更新)

目录 8.1 挂载子节点与属性 8.2 HTML Attributes 与 DOM Properties 8.3 设置元素属性的正确方式 8.4 处理 class 属性 8.5 卸载操作 8.6 区分 vnode 类型 8.7 事件处理优化 8.8 事件冒泡与更新时机问题 8.9 子节点的更新 8.10 文本节点和注释节点 8.11 片段&#xf…...

Ubuntu20.04中 Redis 的安装和配置

Ubuntu20.04 中 Redis 的安装和配置 Ubuntu 安装 MySQL 及其配置 1. Redis 的安装 更新系统包列表并安装 Redis &#xff1a; # 更新包管理工具 sudo apt update# -y&#xff1a;自动确认所有提示&#xff08;非交互式安装&#xff09; sudo apt install -y redis-server测…...

从游戏到自动驾驶:互联网时代强化学习如何让机器学会自主决策?

一、为什么机器需要“试错学习”&#xff1f;——强化学习的核心秘密 你有没有玩过《超级马里奥》&#xff1f;当你操控马里奥躲避乌龟、跳过悬崖时&#xff0c;其实就在用一种“试错”的方法学习最优路径。强化学习&#xff08;Reinforcement Learning, RL&#xff09;就是让…...

实验四:图像灰度处理

实验四 图像处理实验报告 目录 实验目的实验内容 原理描述Verilog HDL设计源代码Testbench仿真代码及仿真结果XDC文件配置下板测试 实验体会实验照片 实验目的 在实验三的基础上&#xff0c;将图片显示在显示器上&#xff0c;并进行灰度处理。 实验内容 原理描述 1. 图片的…...

asp.net mvc如何简化控制器逻辑

在ASP.NET MVC中&#xff0c;可以通过以下方法简化控制器逻辑&#xff1a; ASP.NET——MVC编程_aspnet mvc-CSDN博客 .NET/ASP.NET MVC Controller 控制器&#xff08;IController控制器的创建过程&#xff09; https://cloud.tencent.com/developer/article/1015115 【转载…...

解析“与此站点的连接不安全”警告:成因与应对策略

一、技术本质&#xff1a;SSL/TLS协议的信任链断裂 现代浏览器通过SSL/TLS协议建立加密通信&#xff0c;其核心在于证书颁发机构&#xff08;CA&#xff09;构建的信任链。当用户访问网站时&#xff0c;浏览器会验证服务器证书的有效性&#xff0c;包括&#xff1a; 证书链完…...

PyCharm和VS Code哪个更适合初学者

对于 Python 初学者来说&#xff0c;选择 VS Code 还是 PyCharm 取决于你的具体需求和使用场景。以下是两者的详细对比和推荐建议&#xff1a; VS Code 优点&#xff1a; 轻量级&#xff1a;启动速度快&#xff0c;占用资源少&#xff0c;适合在低端设备上运行。高度可定制&am…...

⚡️ Linux Docker 基本命令参数详解

&#x1f433; Linux Docker 基本命令参数详解 &#x1f4d8; 1. Docker 简介 Docker 是一个开源的容器化平台&#xff0c;它通过将应用及其依赖打包到一个轻量级、可移植的容器中&#xff0c;从而实现跨平台运行。Docker 采用 C/S 架构&#xff0c;服务端称为 Docker Daemon&a…...

做题笔记(ctfshow)

一。ctfshow web13 文件扫描 存在upload.php.bak <?php header("content-type:text/html;charsetutf-8");$filename $_FILES[file][name];$temp_name $_FILES[file][tmp_name];$size $_FILES[file][size];$error $_FILES[file][error];$arr pathinfo($fi…...

Linux 用户层 和 内核层锁的实现

目录 一、系统调用futex介绍1. 核心机制2. 常见操作3. 工作流程示例&#xff08;互斥锁&#xff09;4. 优势5. 注意事项6. 典型应用 二、Linux中用户态的锁和内核的锁不是同一个实现吗&#xff1f;2.1 本质区别2.2 用户态锁如何工作&#xff08;以 pthread_mutex 为例&#xff…...

Android第十五次面试总结(第三方组件和adb命令)

Android 第三方组件转为系统组件核心流程 这通常是在进行 Android 系统定制&#xff08;如 ROM 开发、固件制作&#xff09;时完成&#xff0c;目的是让第三方应用拥有更高的权限和系统身份。主要过程如下&#xff1a; ​核心准备&#xff1a;签名&#xff01;赋予系统身份​ …...