鸿蒙启动框架配置文件(StartUpTask)

news2024/11/13 9:02:39
{
  "startupTasks": [//有哪些任务
    {
      "name": "StartupTask_001",//任务名字
      "srcEntry": "./ets/startup/StartupTask_001.ets",//任务的文件路径
      "runOnThread": "taskpool",//运行在哪个现成,有两个选择,任务池或者主线程
      "waitOnMainThread": false //要不要主线程等待该任务,一般是false
    },
    {
      "name": "StartupTask_002",
      "srcEntry": "./ets/startup/StartupTask_002.ets",
      "dependencies": [//是否依赖其它的任务
        "StartupTask_001"
      ],
      "runOnThread": "taskpool",
      "waitOnMainThread": false
    },
    {
      "name": "StartupTask_003",
      "srcEntry": "./ets/startup/StartupTask_003.ets",
      "dependencies": [
        "StartupTask_001"
      ],
      "runOnThread": "taskpool",
      "waitOnMainThread": false
    },
    {
      "name": "StartupTask_004",
      "srcEntry": "./ets/startup/StartupTask_004.ets",
      "dependencies": [
        "StartupTask_002"
      ],
      "runOnThread": "taskpool",
      "waitOnMainThread": false
    },
    {
      "name": "StartupTask_005",
      "srcEntry": "./ets/startup/StartupTask_005.ets",
      "dependencies": [
        "StartupTask_003",
        "StartupTask_004"
      ],
      "runOnThread": "taskpool",
      "waitOnMainThread": false
    },
    {
      "name": "StartupTask_006",
      "srcEntry": "./ets/startup/StartupTask_006.ets",
      "runOnThread": "mainThread",
      "waitOnMainThread": false,
      "excludeFromAutoStart": true
    },
    {
      "name": "StartupTask_007",
      "srcEntry": "./ets/startup/StartupTask_007.ets",
      "dependencies": [
        "StartupTask_006"
      ],
      "runOnThread": "mainThread",
      "waitOnMainThread": false,
      "excludeFromAutoStart": true  //false表示系统加载的时候,自动执行任务,true表示可以在代码中任何地方执行
    }
  ],
  "configEntry": "./ets/startup/MyStartupConfigEntry.ets"
}

举例:在Ability中执行任务6 和 7
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');

    let startParams = ['StartupTask_006', 'StartupTask_007'];

    try {
      startupManager.run(startParams).then(() => {
        console.log('StartupTest startupManager run then, startParams = ');
      }).catch((error: BusinessError) => {
        console.info("StartupTest promise catch error, error = " + JSON.stringify(error));
        console.info("StartupTest promise catch error, startParams = "
          + JSON.stringify(startParams));
      })
    } catch (error) {
      let errMsg = JSON.stringify(error);
      let errCode: number = error.code;
      console.log('Startup catch error , errCode= ' + errCode);
      console.log('Startup catch error ,error= ' + errMsg);
    }

  }

上面代码是startup_config的讲解,下面是如何操作
在这里插入图片描述
在如上位置增加startup_config.json,内容如下

{
  "startupTasks": [
    {
      "name": "StartupTask_001",
      "srcEntry": "./ets/startup/InitMMKV.ets",
      "runOnThread": "taskPool",
      "waitOnMainThread": false
    },
    {
      "name": "StartupTask_002",
      "srcEntry": "./ets/startup/initZRouter.ets",
      "dependencies": [
        "StartupTask_001"
      ],
      "runOnThread": "taskPool",
      "waitOnMainThread": false
    },
    {
      "name": "StartupTask_003",
      "srcEntry": "./ets/startup/StartupTask_003.ets",
      "dependencies": [
        "StartupTask_001"
      ],
      "runOnThread": "taskPool",
      "waitOnMainThread": false
    },
    {
      "name": "StartupTask_004",
      "srcEntry": "./ets/startup/StartupTask_004.ets",
      "dependencies": [
        "StartupTask_002"
      ],
      "runOnThread": "taskPool",
      "waitOnMainThread": false
    },
    {
      "name": "StartupTask_005",
      "srcEntry": "./ets/startup/StartupTask_005.ets",
      "dependencies": [
        "StartupTask_003",
        "StartupTask_004"
      ],
      "runOnThread": "taskPool",
      "waitOnMainThread": false
    },
    {
      "name": "StartupTask_006",
      "srcEntry": "./ets/startup/StartupTask_006.ets",
      "runOnThread": "mainThread",
      "waitOnMainThread": false,
      "excludeFromAutoStart": true
    },
    {
      "name": "StartupTask_007",
      "srcEntry": "./ets/startup/StartupTask_007.ets",
      "dependencies": [
        "StartupTask_006"
      ],
      "runOnThread": "mainThread",
      "waitOnMainThread": false,
      "excludeFromAutoStart": true
    }
  ],
  "configEntry": "./ets/startup/StartUpConfigEntry.ets"
}

StartUpConfigEntry.ets文件是配置监听,监听任务的执行,代码如下

//配置监听,监听任务的执行
import { StartupConfig, StartupConfigEntry, StartupListener } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@kit.BasicServicesKit';

export default class StartUpConfigEntry 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,//10秒钟之内执行失败,进入error回调方法
      'startupListener': startupListener
    };
    return config;
  }
}

startup文件夹下的其余的文件就是我们配置的启动任务,我们选择其中的两个,

import { StartupTask, common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

/**
 * 启动任务。需要继承StartupTask
 */
@Sendable
export default class StartupTask_001 extends StartupTask {
  constructor() {
    super();
  }

  async init(context: common.AbilityStageContext) {

    console.info('testTagStartUP: ', '任务一:实例化MMKV');
    return 'initMMKV';//在下一个任务的onDependencyCompleted回调方法会传入StartupTask_001
  }

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

在init方法里初始化第三方SDK

import { StartupTask, common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

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

  async init(context: common.AbilityStageContext) {
    hilog.info(0x0000, 'testTagStartUP', 'StartupTask_007 init.');
    return 'StartupTask_007';
  }

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

在module.json5中配置(见下图)
在这里插入图片描述
OK大功告成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

泰克TDP1000差分探头Tektronix TDP0500参数资料

泰克Tektronix TDP0500 TDP1000 高压差分探头 ​Tektronix TDP1000 高压差分探头是一款多功能且易于使用的探头&#xff0c;可提供开关电源、CAN/LIN 总线和高速数字系统设计所需的高速电气和机械性能。Tektronix TDP1000 探头专为与 TekVPI 探头接口或 TekProbe BNC 接口配…

Java:路径计算与障碍物处理

Java 实现寻找字符串数组中的最长公共前缀及不同路径数量计算&#xff08;含障碍物&#xff09; 在计算机科学和软件开发中&#xff0c;经常需要解决一些基本但实用的问题。本文将介绍两种常见问题的解决方案&#xff1a;一是从一组字符串中找出最长公共前缀&#xff1b;二是计…

能力驱动的企业战略转型:基于能力规划的战略转型与数字化实践全指南

在当今数字化和全球化加速发展的时代&#xff0c;企业面临着复杂的市场环境和迅速变化的客户需求。为了在竞争中脱颖而出&#xff0c;企业必须不仅制定卓越的战略&#xff0c;还需确保这些战略能够有效地转化为实际行动。基于能力规划&#xff08;Capability-Based Planning, C…

Lua 代码编码规范

lua代码格式 vscode stylua 插件 配置文件stylua.toml column_width 240 line_endings “Unix” indent_type “Spaces” --使用空格 很重要&#xff0c;保证不同编辑器打开是一样的 indent_width 4 quote_style “AutoPreferDouble” --字符串引号样式双引号 call_paren…

海康二次开发学习笔记9-通讯触发及模块列表获取

通讯触发及模块列表获取 模块列表获取 获取流程中所有模块的模块名,添加下拉框用于显示模块名 1. 处理Combox2的DropDown事件 /// <summary>/// 模块列表获取/// </summary>/// <param name"sender"></param>/// <param name"e&q…

MCU官方IDE软件安装及学习教程集合 — STM32CubeIDE(STM32)

简介 各MCU厂商为保证产品的市场地位以及用户体验&#xff0c;不断的完善自己的产品配套&#xff0c;搭建自己的开发生态&#xff0c;像国外ST公司&#xff0c;国内的GD&#xff08;兆易创新&#xff09;&#xff0c;AT&#xff08;雅特力&#xff09;等等。目前就开发生态而言…

测试.net core服务项目调用dotNetify-Pulse监控性能的基本用法

微信公众号“DotNet讲堂”的文章《开源 .NET API 实时监控项目》介绍了开源实时日志及性能监控项目dotNetify-Pulse&#xff0c;在项目中引用简单&#xff0c;既能用其自带的监控页面&#xff0c;也支持按需配置监控页面。本文在之前创建的环境检测项目中添加并测试dotNetify-P…

逆向工程核心原理 Chapter20 | “内嵌补丁”练习

前言 自己学《逆向工程核心原理》一书的记录&#xff0c;只记录自己觉得重要/有用的一些点。 知识点学习 很实用的一个逆向技术。 原理&#xff1a; “壳”的逻辑也是这样的。EP处先解密OEP代码&#xff0c;再跳转到洞穴代码&#xff0c;恢复IAT之类的&#xff0c;然后跳回…

免费分享-MATLAB代码融合正余弦和柯西变异的麻雀优化算法SCSSA-CNN-BiLSTM双向长短期记忆网络预测模型

融合正余弦和柯西变异的麻雀优化算法SCSSA-CNN-BiLSTM双向长短期记忆网络预测模型 通过融合正余弦和柯西变异改进麻雀搜索算法&#xff0c;对CNN-BiLSTM的学习率、正则化参数以及BiLSTM隐含层神经元个数等进行优化 预测效果图如下 代码如下&#xff1a; %% 清空环境变量 wa…

Vue(七) TodoList案例1.0

文章目录 组件化编码流程(通用)1. 拆分静态组件2. 初始化列表展示动态数据如何让一个标签动态的拥有某一个属性 3. 按回车添加todo子组件给父组件传值之props 4. 勾选与取消勾选一个Todo5. 删除6. footer底部统计7. footer底部交互7.1 全选框自动打勾7.2 全选框取消勾选 8. 清除…

【java】vscode配置javaweb开发环境

下载jdk https://www.oracle.com/java/technologies/downloads/?er221886下载完毕直接安装&#xff0c;安装完毕自动添加以下环境变量 在cmd中运行 java -version出现以下代表成功 再添加系统变量 下载Maven https://maven.apache.org/download.cgi下载完解压放到自己方…

win10环境下gvim离线配置插件的一些补充

0 总述 在上一篇博客&#xff0c;即《Windows系统下使用gvim配置LaTeX快速书写环境》一文中&#xff0c;本小白试图模仿神级人物Gilles Castel&#xff0c;打造vim下的 LaTeX \LaTeX LATE​X书写环境。实话实说&#xff0c;东施效颦了。虽不至于一无所得&#xff0c;但也仅仅算…

STM32通过ADM3222完成UART转232通信电平转换

1、简介 单片机默认串口输出电平是UART信号,但是在实际项目中经常需要将其转换成232电平,此时就需要ADM3222芯片来完成电平的转换,下面对使用过程进行总结。 2、硬件电路 从上图中可以看到芯片需要对1、18进行配置才能进行工作,通过查阅手册可知,1引脚需要配置低电平,…

生物信息学:DNA序列的构成

DNA序列是由一串字母表示的真实的或者假设的携带基因信息的DNA分子的一级结构。‌ DNA序列的构成基于四种特定的碱基&#xff0c;分别是腺嘌呤&#xff08;A&#xff09;、胸腺嘧啶&#xff08;T&#xff09;、鸟嘌呤&#xff08;G&#xff09;和胞嘧啶&#xff08;C&#xff…

【机器学习】K近邻(K-Nearest Neighbors,简称KNN)的基本概念以及消极方法和积极方法的区别

引言 K近邻&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;算法是一种基础的机器学习方法&#xff0c;属于监督学习范畴 文章目录 引言一、K近邻&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;1.1 原理详述1.1.1 距离度量1.1.2 选择k值1.1.…

django网吧收费管理系统 项目源码26819

摘 要 随着互联网的普及&#xff0c;网吧作为公共互联网接入场所&#xff0c;依旧在许多地区发挥着重要作用。现代网吧不仅仅是提供上网服务的场所&#xff0c;还包括了游戏、社交、休闲等多功能体验。为了提高网吧的服务质量和运营效率&#xff0c;迫切需要一个高效的管理系统…

采集工具选型调研

原文阅读&#xff1a;【巨人肩膀社区博客分享】采集工具选型调研 大家一起来探讨SeaTunnel方案&#xff0c;简化当前Dinky与chunjun的双轨模式&#xff08;Dinky仅用于实时同步&#xff0c;chunjun负责离线处理&#xff09;。提议小组一起共议&#xff0c;并由大数据组构建dem…

大模型battle,哪家才是真的“价美”也“物美”

大模型battle&#xff0c;哪家才是真的“价美”也“物美” 物美价廉何为物美价廉大模型battle基础能力测试&#xff1a;专业能力测试&#xff1a;中文特性能力测试&#xff1a;逻辑推理能力测试&#xff1a;创新能力测试&#xff1a;安全性与合规性测试&#xff1a;写在最后 近…

【Qt窗口】—— 对话框

目录 &#xff08;一&#xff09; 对话框介绍 &#xff08;二&#xff09;对话框的分类 2.1 模态对话框 2.2 非模态对话框 2.3 混合属性对话框 &#xff08;三&#xff09;内置对话框 消息对话框 QMessageBox 颜色对话框 QColorDialog 字体对话框 QFontDialog 输入对…

RK3588 系列之1—串口连接

RK3588 系列之1—串口连接 1.串口转USB芯片驱动2.使用MobaXterm进行串口链接3.注意事项 1.串口转USB芯片驱动 根据使用的芯片安装不同的驱动&#xff0c;常见的如CH340。装完驱动后&#xff0c;通过设备管理器&#xff0c;查看开发板与个人PC连接情况&#xff0c;记住占用的端…