0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙Ability Kit(程序框架服務(wù))【應(yīng)用啟動(dòng)框架AppStartup】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-10 18:38 ? 次閱讀

應(yīng)用啟動(dòng)框架AppStartup

概述

AppStartup提供了一種更加簡(jiǎn)單高效的初始化組件的方式,支持異步初始化組件加速應(yīng)用的啟動(dòng)時(shí)間。使用啟動(dòng)框架應(yīng)用開(kāi)發(fā)者只需要分別為待初始化的組件實(shí)現(xiàn)AppStartup提供的[StartupTask]接口,并在[startup_config]中配置AppStartup之間的依賴(lài)關(guān)系,啟動(dòng)框架將使用拓?fù)渑判虮WC各個(gè)待初始化組件的初始化順序。啟動(dòng)框架只支持在entry中使用。

添加配置

應(yīng)用需要在[module.json5配置文件]中配置appStartup標(biāo)簽, 并指定啟動(dòng)框架的配置文件路徑。

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

添加啟動(dòng)框架配置文件

應(yīng)用需要在工程的resource目錄下添加啟動(dòng)框架的配置文件,配置文件路徑需要與[module.json5配置文件]中appStartup標(biāo)簽指定的路徑一致。

示例代碼如下所示。

{
  "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配置文件標(biāo)簽說(shuō)明

屬性名稱(chēng)含義數(shù)據(jù)類(lèi)型是否可缺省
startupTasks待初始化組件配置信息對(duì)象數(shù)組該標(biāo)簽不可缺省。
configEntry[StartupConfig]文件路徑。字符串該標(biāo)簽不可缺省。

startupTasks標(biāo)簽說(shuō)明

屬性名稱(chēng)含義數(shù)據(jù)類(lèi)型是否可缺省
name待初始化組件實(shí)現(xiàn)[StartupTask]接口的類(lèi)名稱(chēng)。對(duì)象數(shù)組該標(biāo)簽不可缺省。
srcEntry需要加載的組件實(shí)現(xiàn)[StartupTask]接口的文件路徑。字符串該標(biāo)簽不可缺省。
dependencies當(dāng)前組件所依賴(lài)組件實(shí)現(xiàn)[StartupTask]接口的類(lèi)名稱(chēng)數(shù)組。對(duì)象數(shù)組該標(biāo)簽可缺省,缺省值為空。
excludeFromAutoStart是否排除自動(dòng)模式。 - true:手動(dòng)模式。 - false:自動(dòng)模式。布爾值該標(biāo)簽可缺省,缺省值為false。
waitOnMainThread是否在主線程等待。 - true:主線程等待組件初始化。 - false:主線程不等待組件初始化。布爾值該標(biāo)簽可缺省,缺省值為true。
runOnThread執(zhí)行初始化所在的線程。 -mainThread:在主線程中執(zhí)行。 -taskPool:在異步線程中執(zhí)行。字符串該標(biāo)簽可缺省,缺省值為mainThread

添加啟動(dòng)框架組件

所有待加載組件均要實(shí)現(xiàn)[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));
  }
}

添加啟動(dòng)框架配置

應(yīng)用需要在工程的ets目錄下的startup文件夾下添加啟動(dòng)框架配置,開(kāi)發(fā)者可以在該文件中配置超時(shí)時(shí)間以及組件初始化的監(jiān)聽(tīng)器,啟動(dòng)框架配置需要在[StartupConfigEntry]中設(shè)置[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;
  }
}

啟動(dòng)組件

AppStartup分別提供了自動(dòng)和手動(dòng)兩種方式來(lái)初始化組件,應(yīng)用開(kāi)發(fā)者可以根據(jù)自己的需求選擇合適的初始化方式。

手動(dòng)模式

手動(dòng)模式需要應(yīng)用開(kāi)發(fā)者手動(dòng)調(diào)用[StartupManager]中的[run]方法來(lái)手動(dòng)啟動(dòng)組件的初始化。

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直接拿`

自動(dòng)模式

自動(dòng)模式應(yīng)用開(kāi)發(fā)者需要將[startup_config]中的excludeFromAutoStart標(biāo)簽設(shè)置為false,當(dāng)應(yīng)用啟動(dòng)時(shí)啟動(dòng)框架會(huì)在abilityStage的onCreate前執(zhí)行組件初始化。

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

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    403

    瀏覽量

    17502
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2358

    瀏覽量

    42876
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙開(kāi)發(fā)接口Ability框架:【@ohos.application.Ability (Ability)】

    Ability模塊提供對(duì)Ability生命周期、上下文環(huán)境等調(diào)用管理的能力,包括Ability創(chuàng)建、銷(xiāo)毀、轉(zhuǎn)儲(chǔ)客戶端信息等。
    的頭像 發(fā)表于 04-30 17:42 ?2273次閱讀
    <b class='flag-5'>鴻蒙</b>開(kāi)發(fā)接口<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>)】

    鴻蒙開(kāi)發(fā)接口Ability框架:【@ohos.ability.featureAbility (FeatureAbility模塊)】

    FeatureAbility模塊提供帶有UI設(shè)計(jì)與用戶交互的能力,包括啟動(dòng)新的ability、獲取dataAbilityHelper、設(shè)置此Page Ability、獲取當(dāng)前Ability
    的頭像 發(fā)表于 05-06 16:31 ?1009次閱讀
    <b class='flag-5'>鴻蒙</b>開(kāi)發(fā)接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【@ohos.<b class='flag-5'>ability</b>.featureAbility (FeatureAbility模塊)】

    鴻蒙開(kāi)發(fā)接口Ability框架:【(AbilityDelegator)】

    OnCreate生命周期、設(shè)置等待時(shí)間等、獲取指定ability的生命周期狀態(tài)、獲取當(dāng)前應(yīng)用頂部ability、啟動(dòng)指定ability等。
    的頭像 發(fā)表于 05-13 17:58 ?964次閱讀
    <b class='flag-5'>鴻蒙</b>開(kāi)發(fā)接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【(AbilityDelegator)】

    鴻蒙開(kāi)發(fā)接口Ability框架:【AbilityDelegator】

    OnCreate生命周期、設(shè)置等待時(shí)間等、獲取指定ability的生命周期狀態(tài)、獲取當(dāng)前應(yīng)用頂部ability啟動(dòng)指定ability等。
    的頭像 發(fā)表于 05-16 16:48 ?940次閱讀
    <b class='flag-5'>鴻蒙</b>開(kāi)發(fā)接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【AbilityDelegator】

    鴻蒙Ability Kit程序框架服務(wù))【ServiceExtensionAbility】

    [ServiceExtensionAbility]是SERVICE類(lèi)型的ExtensionAbility組件,提供后臺(tái)服務(wù)能力,其內(nèi)部持有了一個(gè)[ServiceExtensionContext],通過(guò)[ServiceExtensionContext]提供了豐富的接口供外部使用。
    的頭像 發(fā)表于 06-04 14:50 ?1208次閱讀
    <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'>服務(wù)</b>)【ServiceExtensionAbility】

    鴻蒙Ability Kit程序框架服務(wù))【UIExtensionAbility】

    [UIExtensionAbility]是UI類(lèi)型的ExtensionAbility組件,需要與[UIExtensionComponent]一起配合使用,開(kāi)發(fā)者可以在UIAbility的頁(yè)面中通過(guò)UIExtensionComponent嵌入提供方應(yīng)用的UIExtensionAbility提供的UI。UIExtensionAbility會(huì)在獨(dú)立于UIAbility的進(jìn)程中運(yùn)行,完成其頁(yè)面的布局和渲染。常用于有進(jìn)程隔離訴求的系統(tǒng)彈窗、狀態(tài)欄、膠囊等模塊化開(kāi)發(fā)的場(chǎng)景。
    的頭像 發(fā)表于 06-05 09:19 ?1394次閱讀
    <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'>服務(wù)</b>)【UIExtensionAbility】

    HarmonyOS NEXT應(yīng)用元服務(wù)開(kāi)發(fā)Intents Kit(意圖框架服務(wù))綜述

    一、綜述 Intents Kit(意圖框架服務(wù))是HarmonyOS級(jí)的意圖標(biāo)準(zhǔn)體系 ,意圖連接了應(yīng)用/元服務(wù)內(nèi)的業(yè)務(wù)功能。 意圖框架能幫開(kāi)
    發(fā)表于 11-28 10:43

    鴻蒙應(yīng)用開(kāi)發(fā)的JS UI框架如何實(shí)現(xiàn)高德地圖的訪問(wèn)?

    鴻蒙應(yīng)用,現(xiàn)在分為Java UI框架和Ark UI框架,其中JS UI開(kāi)發(fā)者框架Ark UI框架,現(xiàn)在高德地圖為
    發(fā)表于 04-28 11:44

    鴻蒙應(yīng)用模型:【Ability Kit】簡(jiǎn)介

    Ability Kit程序框架服務(wù))提供了應(yīng)用程序開(kāi)發(fā)和運(yùn)行的應(yīng)用模型,是系統(tǒng)為開(kāi)發(fā)者提供的應(yīng)
    的頭像 發(fā)表于 05-29 14:41 ?668次閱讀
    <b class='flag-5'>鴻蒙</b>應(yīng)用模型:【<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>】簡(jiǎn)介

    鴻蒙Ability Kit程序框架服務(wù))【UIAbility組件啟動(dòng)模式】

    UIAbility的啟動(dòng)模式是指UIAbility實(shí)例在啟動(dòng)時(shí)的不同呈現(xiàn)狀態(tài)。針對(duì)不同的業(yè)務(wù)場(chǎng)景,系統(tǒng)提供了三種啟動(dòng)模式:
    的頭像 發(fā)表于 06-06 11:05 ?851次閱讀
    <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'>服務(wù)</b>)【UIAbility組件<b class='flag-5'>啟動(dòng)</b>模式】

    鴻蒙Ability Kit程序框架服務(wù))【UIAbility組件基本用法】

    UIAbility組件的基本用法包括:指定UIAbility的啟動(dòng)頁(yè)面以及獲取UIAbility的上下文[UIAbilityContext]。
    的頭像 發(fā)表于 06-06 11:02 ?490次閱讀
    <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'>服務(wù)</b>)【UIAbility組件基本用法】

    鴻蒙Ability Kit程序框架服務(wù))【Ability內(nèi)頁(yè)面間的跳轉(zhuǎn)】

    基于Stage模型下的Ability開(kāi)發(fā),實(shí)現(xiàn)Ability內(nèi)頁(yè)面間的跳轉(zhuǎn)和數(shù)據(jù)傳遞。
    的頭像 發(fā)表于 06-03 20:43 ?304次閱讀
    <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'>服務(wù)</b>)【<b class='flag-5'>Ability</b>內(nèi)頁(yè)面間的跳轉(zhuǎn)】

    鴻蒙Ability Kit程序框架服務(wù))【ExtensionAbility組件】

    ExtensionAbility組件是基于特定場(chǎng)景(例如服務(wù)卡片、輸入法等)提供的應(yīng)用組件,以便滿足更多的使用場(chǎng)景。
    的頭像 發(fā)表于 06-04 15:54 ?610次閱讀
    <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'>服務(wù)</b>)【ExtensionAbility組件】

    鴻蒙Ability Kit程序框架服務(wù))【Ability與ServiceExtensionAbility通信】

    本示例展示通過(guò)[IDL的方式]和?[@ohos.rpc]?等接口實(shí)現(xiàn)了Ability與ServiceExtensionAbility之間的通信。
    的頭像 發(fā)表于 06-05 09:28 ?497次閱讀
    <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'>服務(wù)</b>)【<b class='flag-5'>Ability</b>與ServiceExtensionAbility通信】

    鴻蒙開(kāi)發(fā)Ability Kit程序框架服務(wù):任務(wù)管理

    AbilityRecord:系統(tǒng)服務(wù)側(cè)管理一個(gè)UIAbility實(shí)例的最小單元,對(duì)應(yīng)一個(gè)應(yīng)用側(cè)的UIAbility組件實(shí)例。系統(tǒng)服務(wù)側(cè)管理UIAbility實(shí)例數(shù)量上限為512個(gè)。
    的頭像 發(fā)表于 06-24 14:46 ?457次閱讀
    <b class='flag-5'>鴻蒙</b>開(kāi)發(fā)<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'>服務(wù)</b>:任務(wù)管理