0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

鸿蒙Ability Kit(程序框架服务)【应用启动框架AppStartup】

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-06-10 18:38 次阅读

应用启动框架AppStartup

概述

AppStartup提供了一种更加简单高效的初始化组件的方式,支持异步初始化组件加速应用的启动时间。使用启动框架应用开发者只需要分别为待初始化的组件实现AppStartup提供的[StartupTask]接口,并在[startup_config]中配置AppStartup之间的依赖关系,启动框架将使用拓扑排序保证各个待初始化组件的初始化顺序。启动框架只支持在entry中使用。

添加配置

应用需要在[module.json5配置文件]中配置appStartup标签, 并指定启动框架的配置文件路径。

{
  "module": {
    "name": "entry",
    "type": "entry",
    ...
    "appStartup": "$profile:startup_config",
    ...
  }
}

添加启动框架配置文件

应用需要在工程的resource目录下添加启动框架的配置文件,配置文件路径需要与[module.json5配置文件]中appStartup标签指定的路径一致。

示例代码如下所示。

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

startup_config配置文件标签说明

属性名称含义数据类型是否可缺省
startupTasks待初始化组件配置信息对象数组该标签不可缺省。
configEntry[StartupConfig]文件路径。字符串该标签不可缺省。

startupTasks标签说明

属性名称含义数据类型是否可缺省
name待初始化组件实现[StartupTask]接口的类名称。对象数组该标签不可缺省。
srcEntry需要加载的组件实现[StartupTask]接口的文件路径。字符串该标签不可缺省。
dependencies当前组件所依赖组件实现[StartupTask]接口的类名称数组。对象数组该标签可缺省,缺省值为空。
excludeFromAutoStart是否排除自动模式。 - true:手动模式。 - false:自动模式。布尔值该标签可缺省,缺省值为false。
waitOnMainThread是否在主线程等待。 - true:主线程等待组件初始化。 - false:主线程不等待组件初始化。布尔值该标签可缺省,缺省值为true。
runOnThread执行初始化所在的线程。 -mainThread:在主线程中执行。 -taskPool:在异步线程中执行。字符串该标签可缺省,缺省值为mainThread

添加启动框架组件

所有待加载组件均要实现[StartupTask]接口,文件放置在工程的ets目录下的startup文件夹下,StartupTask必须添加[Sendable]注解。

import StartupTask from '@ohos.app.appstartup.StartupTask';
import common from '@ohos.app.ability.common';
import hilog from '@ohos.hilog';

@Sendable
export default class StartupTask_001 extends StartupTask {
  constructor() {
    super();
  }
  async init(context: common.AbilityStageContext) {
    hilog.info(0x0000, 'testTag', 'StartupTask_001 init.');
    return 'StartupTask_001';
  }

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

添加启动框架配置

应用需要在工程的ets目录下的startup文件夹下添加启动框架配置,开发者可以在该文件中配置超时时间以及组件初始化的监听器,启动框架配置需要在[StartupConfigEntry]中设置[StartupConfig]与[StartupListener]。

import StartupConfig from '@ohos.app.appstartup.StartupConfig';
import StartupConfigEntry from '@ohos.app.appstartup.StartupConfigEntry';
import StartupListener from '@ohos.app.appstartup.StartupListener';
import hilog from '@ohos.hilog';
import { BusinessError } from '@ohos.base';

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;
  }
}

启动组件

AppStartup分别提供了自动和手动两种方式来初始化组件,应用开发者可以根据自己的需求选择合适的初始化方式。

手动模式

手动模式需要应用开发者手动调用[StartupManager]中的[run]方法来手动启动组件的初始化。

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { BusinessError } from '@ohos.base';
import startupManager from '@ohos.app.appstartup.startupManager';

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'];
    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);
    }
  }
  ...
}

`HarmonyOSOpenHarmony鸿蒙文档籽料:mau123789是v直接拿`

自动模式

自动模式应用开发者需要将[startup_config]中的excludeFromAutoStart标签设置为false,当应用启动时启动框架会在abilityStage的onCreate前执行组件初始化。

{
  "startupTasks": [
    {
      "name": "StartupTask_001",
      ...
      "excludeFromAutoStart": false
    },
    ...
  ],
  ...
}

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 框架
    +关注

    关注

    0

    文章

    378

    浏览量

    17150
  • 鸿蒙
    +关注

    关注

    55

    文章

    2090

    浏览量

    42261
收藏 人收藏

    评论

    相关推荐

    鸿蒙开发接口Ability框架:【@ohos.application.Ability (Ability)】

    Ability模块提供对Ability生命周期、上下文环境等调用管理的能力,包括Ability创建、销毁、转储客户端信息等。
    的头像 发表于 04-30 17:42 1978次阅读
    <b class='flag-5'>鸿蒙</b>开发接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【@ohos.application.<b class='flag-5'>Ability</b> (<b class='flag-5'>Ability</b>)】

    鸿蒙开发接口Ability框架:【@ohos.ability.featureAbility (FeatureAbility模块)】

    FeatureAbility模块提供带有UI设计与用户交互的能力,包括启动新的ability、获取dataAbilityHelper、设置此Page Ability、获取当前Ability
    的头像 发表于 05-06 16:31 680次阅读
    <b class='flag-5'>鸿蒙</b>开发接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【@ohos.<b class='flag-5'>ability</b>.featureAbility (FeatureAbility模块)】

    鸿蒙开发接口Ability框架:【 (Context模块)】

    Context模块提供了ability或application的上下文的能力,包括允许访问特定于应用程序的资源、请求和验证权限等。
    的头像 发表于 05-13 16:04 400次阅读
    <b class='flag-5'>鸿蒙</b>开发接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【 (Context模块)】

    鸿蒙开发接口Ability框架:【(AbilityDelegator)】

    OnCreate生命周期、设置等待时间等、获取指定ability的生命周期状态、获取当前应用顶部ability启动指定ability等。
    的头像 发表于 05-13 17:58 699次阅读
    <b class='flag-5'>鸿蒙</b>开发接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【(AbilityDelegator)】

    鸿蒙开发接口Ability框架:【AbilityDelegator】

    OnCreate生命周期、设置等待时间等、获取指定ability的生命周期状态、获取当前应用顶部ability启动指定ability等。
    的头像 发表于 05-16 16:48 747次阅读
    <b class='flag-5'>鸿蒙</b>开发接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【AbilityDelegator】

    鸿蒙Ability Kit程序框架服务)【UIExtensionAbility】

    [UIExtensionAbility]是UI类型的ExtensionAbility组件,需要与[UIExtensionComponent]一起配合使用,开发者可以在UIAbility的页面中通过UIExtensionComponent嵌入提供方应用的UIExtensionAbility提供的UI。UIExtensionAbility会在独立于UIAbility的进程中运行,完成其页面的布局和渲染。常用于有进程隔离诉求的系统弹窗、状态栏、胶囊等模块化开发的场景。
    的头像 发表于 06-05 09:19 734次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【UIExtensionAbility】

    HarmonyOS NEXT Developer Beta1中的Kit

    、AI六大领域,例如: 应用框架相关Kit开放能力:Ability Kit程序框架
    发表于 06-26 10:47

    【HarmonyOS IPC 试用连载 】鸿蒙系统初步了解

    框架层提供了HarmonyOS应用开发提供了Java/C/C++/JS等多语言的用户程序框架Ability框架,以及各种软硬件
    发表于 01-04 17:25

    鸿蒙应用开发的JS UI框架如何实现高德地图的访问?

    鸿蒙应用,现在分为Java UI框架和Ark UI框架,其中JS UI开发者框架Ark UI框架,现在高德地图为
    发表于 04-28 11:44

    使用FeatureAbility模块启动其他Ability

    (FeatureAbility)和PA(ParticleAbility)两种类型。其中FA唯一支持的模板Page Ability,其用于提供与用户交互能力,在设备主界面上有可见的桌面图标,能够通过图标启动应用程序
    发表于 09-02 15:04

    鸿蒙Ability Kit程序框架服务)【UIAbility组件启动模式】

    UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式:
    的头像 发表于 06-06 11:05 212次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【UIAbility组件<b class='flag-5'>启动</b>模式】

    鸿蒙Ability Kit程序框架服务)【UIAbility组件基本用法】

    UIAbility组件的基本用法包括:指定UIAbility的启动页面以及获取UIAbility的上下文[UIAbilityContext]。
    的头像 发表于 06-06 11:02 194次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【UIAbility组件基本用法】

    鸿蒙Ability Kit程序框架服务)【UIAbility组件间交互(设备内)】

    UIAbility是系统调度的最小单元。在设备内的功能模块之间跳转时,会涉及到启动特定的UIAbility,该UIAbility可以是应用内的其他UIAbility,也可以是其他应用的UIAbility(例如启动三方支付UIAbility)。
    的头像 发表于 06-03 09:53 368次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【UIAbility组件间交互(设备内)】

    鸿蒙Ability Kit程序框架服务)【Ability与ServiceExtensionAbility通信】

    本示例展示通过[IDL的方式]和 [@ohos.rpc] 等接口实现了Ability与ServiceExtensionAbility之间的通信。
    的头像 发表于 06-05 09:28 245次阅读
    <b class='flag-5'>鸿蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>)【<b class='flag-5'>Ability</b>与ServiceExtensionAbility通信】

    鸿蒙开发Ability Kit程序框架服务:任务管理

    AbilityRecord:系统服务侧管理一个UIAbility实例的最小单元,对应一个应用侧的UIAbility组件实例。系统服务侧管理UIAbility实例数量上限为512个。
    的头像 发表于 06-24 14:46 112次阅读
    <b class='flag-5'>鸿蒙</b>开发<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服务</b>:任务管理