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

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

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

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

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-10 18:38 ? 次閱讀

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

概述

AppStartup提供了一種更加簡單高效的初始化組件的方式,支持異步初始化組件加速應(yīng)用的啟動時間。使用啟動框架應(yīng)用開發(fā)者只需要分別為待初始化的組件實現(xiàn)AppStartup提供的[StartupTask]接口,并在[startup_config]中配置AppStartup之間的依賴關(guān)系,啟動框架將使用拓撲排序保證各個待初始化組件的初始化順序。啟動框架只支持在entry中使用。

添加配置

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

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

添加啟動框架配置文件

應(yīng)用需要在工程的resource目錄下添加啟動框架的配置文件,配置文件路徑需要與[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)簽說明

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

startupTasks標(biāo)簽說明

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

添加啟動框架組件

所有待加載組件均要實現(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));
  }
}

添加啟動框架配置

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

啟動組件

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

手動模式

手動模式需要應(yīng)用開發(fā)者手動調(diào)用[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直接拿`

自動模式

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

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

審核編輯 黃宇

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

    關(guān)注

    0

    文章

    396

    瀏覽量

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

    關(guān)注

    56

    文章

    2267

    瀏覽量

    42489
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

    [ServiceExtensionAbility]是SERVICE類型的ExtensionAbility組件,提供后臺服務(wù)能力,其內(nèi)部持有了一個[ServiceExtensionContext],通過[ServiceExtensionContext]提供了豐富的接口供外部使用。
    的頭像 發(fā)表于 06-04 14:50 ?969次閱讀
    <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類型的ExtensionAbility組件,需要與[UIExtensionComponent]一起配合使用,開發(fā)者可以在UIAbility的頁面中通過UIExtensionComponent嵌入提供方應(yīng)用的UIExtensionAbility提供的UI。UIExtensionAbility會在獨立于UIAbility的進程中運行,完成其頁面的布局和渲染。常用于有進程隔離訴求的系統(tǒng)彈窗、狀態(tài)欄、膠囊等模塊化開發(fā)的場景。
    的頭像 發(fā)表于 06-05 09:19 ?1094次閱讀
    <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】

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

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

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

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

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

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

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

    UIAbility組件的基本用法包括:指定UIAbility的啟動頁面以及獲取UIAbility的上下文[UIAbilityContext]。
    的頭像 發(fā)表于 06-06 11:02 ?317次閱讀
    <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)頁面間的跳轉(zhuǎn)】

    基于Stage模型下的Ability開發(fā),實現(xiàn)Ability內(nèi)頁面間的跳轉(zhuǎn)和數(shù)據(jù)傳遞。
    的頭像 發(fā)表于 06-03 20:43 ?188次閱讀
    <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)頁面間的跳轉(zhuǎn)】

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

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

    本示例展示通過[IDL的方式]和?[@ohos.rpc]?等接口實現(xiàn)了Ability與ServiceExtensionAbility之間的通信。
    的頭像 發(fā)表于 06-05 09:28 ?345次閱讀
    <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通信】

    鴻蒙Ability Kit程序框架服務(wù))【組件啟動規(guī)則(Stage模型)】

    組件啟動規(guī)則(Stage模型) 啟動組件是指一切啟動或連接應(yīng)用組件的行為: 啟動UIAbility、ServiceExtensionAbility、DataShareExtension
    的頭像 發(fā)表于 06-10 18:47 ?585次閱讀
    <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'>啟動</b>規(guī)則(Stage模型)】

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

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