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ù))【UIExtensionAbility】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-05 09:19 ? 次閱讀

UIExtensionAbility

概述

[UIExtensionAbility]是UI類型的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)景。

說(shuō)明:
開(kāi)發(fā)前請(qǐng)熟悉鴻蒙開(kāi)發(fā)指導(dǎo)文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]
當(dāng)前UIExtensionAbility和UIExtensionComponent僅支持系統(tǒng)應(yīng)用使用。

生命周期

[UIExtensionAbility]提供了onCreate、onSessionCreate、onSessionDestroy、onForeground、onBackground和onDestroy生命周期回調(diào),根據(jù)需要重寫(xiě)對(duì)應(yīng)的回調(diào)方法。

  • [ onCreate ]:當(dāng)UIExtensionAbility創(chuàng)建時(shí)回調(diào),執(zhí)行初始化業(yè)務(wù)邏輯操作。
  • [ onSessionCreate ]:當(dāng)UIExtensionAbility界面內(nèi)容對(duì)象創(chuàng)建后調(diào)用。
  • [ onSessionDestroy ]:當(dāng)UIExtensionAbility界面內(nèi)容對(duì)象銷(xiāo)毀后調(diào)用。
  • [ onForeground ]:當(dāng)UIExtensionAbility從后臺(tái)轉(zhuǎn)到前臺(tái)時(shí)觸發(fā)。
  • [ onBackground ]:當(dāng)UIExtensionAbility從前臺(tái)轉(zhuǎn)到后臺(tái)時(shí)觸發(fā)。
  • [ onDestroy ]:當(dāng)UIExtensionAbility銷(xiāo)毀時(shí)回調(diào),可以執(zhí)行資源清理等操作。

選擇合適的UIExtensionAbility進(jìn)程模型

UIExtensionAbility支持多實(shí)例,每個(gè)嵌入式顯示對(duì)應(yīng)一個(gè)UIExtensionAbility實(shí)例。多實(shí)例場(chǎng)景下默認(rèn)是多進(jìn)程,可配置多進(jìn)程模型。 UIExtensionAbility支持多實(shí)例,每個(gè)嵌入式顯示對(duì)應(yīng)一個(gè)UIExtensionAbility實(shí)例。 當(dāng)應(yīng)用中存在多個(gè)UIExtensionAbility實(shí)例,這些實(shí)例可以為多個(gè)獨(dú)立進(jìn)程,也可以共用同一個(gè)進(jìn)程,還可以分為多組、同組實(shí)例共用同一個(gè)進(jìn)程。通過(guò)module.json5配置文件中的extensionProcessMode字段,即可為選擇對(duì)應(yīng)的進(jìn)程模型,三種模型對(duì)比如下:

進(jìn)程模型extensionProcessMode字段配置說(shuō)明
同一bundle中所有UIExtensionAbility共進(jìn)程bundleUIExtensionAbility實(shí)例之間的通信無(wú)需跨IPC通信;實(shí)例之間的狀態(tài)不獨(dú)立,會(huì)存在相互影響。
相同name的UIExtensionAbility共進(jìn)程type將同UIExtensionAbility類配置在同一個(gè)進(jìn)程下,便于應(yīng)用針對(duì)UIExtensionAbility類型對(duì)實(shí)例進(jìn)行管理。
每個(gè)UIExtensionAbility為獨(dú)立進(jìn)程instanceUIExtensionAbility實(shí)例之間的狀態(tài)不會(huì)彼此影響,安全性更高;實(shí)例之間只能通過(guò)跨進(jìn)程進(jìn)行通信。

Bundle中的所有UIExtensionAbility共進(jìn)程

同一個(gè)bundle下的UIExtensionAbility配置在同一個(gè)進(jìn)程中,便于多實(shí)例間的通信。需要關(guān)注的是,各個(gè)實(shí)例之間的狀態(tài)會(huì)彼此影響,當(dāng)進(jìn)程中的一個(gè)實(shí)例異常退出,將導(dǎo)致進(jìn)程中所有的實(shí)例也都會(huì)退出;

圖1 bundle模型配置示意圖
uiextability-bundle-processmodel

Index.ets示例代碼如下:

@Entry
@Component
struct Index {
  @State message: string = 'UIExtension UserA';
  private myProxy: UIExtensionProxy | undefined = undefined;

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(30)
          .size({ width: '100%', height: '50'})
          .fontWeight(FontWeight.Bold)
          .textAlign(TextAlign.Center)

        UIExtensionComponent(
          {
            bundleName: 'com.samples.uiextensionability',
            abilityName: 'UIExtensionProvider',
            moduleName: 'entry',
            parameters: {
              'ability.want.params.uiExtensionType': 'sys/commonUI',
            }
          })
          .onRemoteReady((proxy) = > {
            this.myProxy = proxy;
          })
          .onReceive((data) = > {
            this.message = JSON.stringify(data);
          })
          .onResult((data) = > {
            this.message = JSON.stringify(data);
          })
          .onRelease((code) = > {
            this.message = "release code:" + code;
          })
          .offset({ x: 0, y: 10})
          .size({ width: 300, height: 300})
          .border({ width: 5, color: 0x317AF7, radius: 10, style: BorderStyle.Dotted})

        UIExtensionComponent(
          {
            bundleName: 'com.samples.uiextension2',
            abilityName: 'UIExtensionProviderB',
            moduleName: 'entry',
            parameters: {
              'ability.want.params.uiExtensionType': 'sys/commonUI',
            }
          })
          .onRemoteReady((proxy) = > {
            this.myProxy = proxy;
          })
          .onReceive((data) = > {
            this.message = JSON.stringify(data);
          })
          .onResult((data) = > {
            this.message = JSON.stringify(data);
          })
          .onRelease((code) = > {
            this.message = "release code:" + code;
          })
          .offset({ x: 0, y: 50})
          .size({ width: 300, height: 300})
          .border({ width: 5, color: 0x317AF7, radius: 10, style: BorderStyle.Dotted})
      }
      .width('100%')
    }
    .height('100%')
  }
}

圖2 根據(jù)上述代碼,生成的Index頁(yè)面如下:
uiextension-bundle-example

采用該進(jìn)程模型,進(jìn)程名格式為: process name [{bundleName}:{UIExtensionAbility的類型}] 例如,process name [com.ohos.intentexecutedemo:xxx]。 圖3 進(jìn)程模型展示
uiextension-bundle-process-example

同UIExtensionAbility類的所有UIExtensionAbility共進(jìn)程

根據(jù)UIExtensionAbility類進(jìn)行分配進(jìn)程,拉起多個(gè)同樣的UIExtensionAbility實(shí)例時(shí),這些實(shí)例將配置在同一個(gè)進(jìn)程中。將同UIExtensionAbility類配置在同一個(gè)進(jìn)程下,方便應(yīng)用針對(duì)UIExtensionAbility類型對(duì)實(shí)例進(jìn)行管理;

圖4 type模型配置示意圖
uiextability-type-processmodel

Index.ets示例代碼如下:

@Entry
@Component
struct Index {
  @State message: string = 'UIExtension User';
  private myProxy: UIExtensionProxy | undefined = undefined;

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(30)
          .size({ width: '100%', height: '50'})
          .fontWeight(FontWeight.Bold)
          .textAlign(TextAlign.Center)

        UIExtensionComponent(
          {
            bundleName: 'com.samples.uiextensionability',
            abilityName: 'UIExtensionProviderA',
            moduleName: 'entry',
            parameters: {
              'ability.want.params.uiExtensionType': 'sys/commonUI',
            }
          })
          .onRemoteReady((proxy) = > {
            this.myProxy = proxy;
          })
          .onReceive((data) = > {
            this.message = JSON.stringify(data);
          })
          .onResult((data) = > {
            this.message = JSON.stringify(data);
          })
          .onRelease((code) = > {
            this.message = "release code:" + code;
          })
          .offset({ x: 0, y: 10})
          .size({ width: 300, height: 300})
          .border({ width: 5, color: 0x317AF7, radius: 10, style: BorderStyle.Dotted})

        UIExtensionComponent(
          {
            bundleName: 'com.samples.uiextensionability',
            abilityName: 'UIExtensionProviderB',
            moduleName: 'entry',
            parameters: {
              'ability.want.params.uiExtensionType': 'sys/commonUI',
            }
          })
          .onRemoteReady((proxy) = > {
            this.myProxy = proxy;
          })
          .onReceive((data) = > {
            this.message = JSON.stringify(data);
          })
          .onResult((data) = > {
            this.message = JSON.stringify(data);
          })
          .onRelease((code) = > {
            this.message = "release code:" + code;
          })
          .offset({ x: 0, y: 50})
          .size({ width: 300, height: 300})
          .border({ width: 5, color: 0x317AF7, radius: 10, style: BorderStyle.Dotted})
      }
      .width('100%')
    }
    .height('100%')
  }
}

圖5 根據(jù)上述代碼,生成的Index頁(yè)面如下:
uiextability-type-example

采用該進(jìn)程模型,進(jìn)程名格式為: process name [{bundleName}:{UIExtensionAbility名}] 例如,process name [com.ohos.intentexecutedemo:xxx]。 圖6 進(jìn)程模型展示
uiextability-type-process-example

UIExtensionAbility實(shí)例獨(dú)立進(jìn)程

根據(jù)UIExtensionAbility實(shí)例進(jìn)行分配進(jìn)程,配置了instance的UIExtensionAbility實(shí)例,將每個(gè)實(shí)例獨(dú)立一個(gè)進(jìn)程。獨(dú)立進(jìn)程的場(chǎng)景下,UIExtensionAbility實(shí)例之間只能通過(guò)跨進(jìn)程進(jìn)行通信,但實(shí)例之間的狀態(tài)不會(huì)彼此影響,安全性更高;

圖7 instance模型配置示意圖
uiextability-instance-processmodel

Index.ets示例代碼如下:

@Entry
@Component
struct Index {
  @State message: string = 'UIExtension User'
  private myProxy: UIExtensionProxy | undefined = undefined;

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(30)
          .size({ width: '100%', height: '50'})
          .fontWeight(FontWeight.Bold)
          .textAlign(TextAlign.Center)

        UIExtensionComponent(
          {
            bundleName: 'com.samples.uiextensionability',
            abilityName: 'UIExtensionProvider',
            moduleName: 'entry',
            parameters: {
              'ability.want.params.uiExtensionType': 'sys/commonUI',
            }
          })
          .onRemoteReady((proxy) = > {
            this.myProxy = proxy;
          })
          .onReceive((data) = > {
            this.message = JSON.stringify(data);
          })
          .onResult((data) = > {
            this.message = JSON.stringify(data);
          })
          .onRelease((code) = > {
            this.message = "release code:" + code;
          })
          .offset({ x: 0, y: 10})
          .size({ width: 300, height: 300})
          .border({ width: 5, color: 0x317AF7, radius: 10, style: BorderStyle.Dotted})

        UIExtensionComponent(
          {
            bundleName: 'com.samples.uiextensionability',
            abilityName: 'UIExtensionProvider',
            moduleName: 'entry',
            parameters: {
              'ability.want.params.uiExtensionType': 'sys/commonUI',
            }
          })
          .onRemoteReady((proxy) = > {
            this.myProxy = proxy;
          })
          .onReceive((data) = > {
            this.message = JSON.stringify(data);
          })
          .onResult((data) = > {
            this.message = JSON.stringify(data);
          })
          .onRelease((code) = > {
            this.message = "release code:" + code;
          })
          .offset({ x: 0, y: 50})
          .size({ width: 300, height: 300})
          .border({ width: 5, color: 0x317AF7, radius: 10, style: BorderStyle.Dotted})
      }
      .width('100%')
    }
    .height('100%')
  }
}

圖8 根據(jù)上述代碼,生成的Index頁(yè)面如下:
uiextability-instance-example

采用該進(jìn)程模型,進(jìn)程名格式為: process name [{bundleName}:{UIExtensionAbility的類型}: {實(shí)例后綴}] 例如,process name [com.ohos.intentexecutedemo:xxx:n]。 圖9 進(jìn)程模型展示
uiextability-instance-process-example

UIExtensionAbility通過(guò)[UIExtensionContext]和[UIExtensionContentSession]提供相關(guān)能力。本文描述中稱被啟動(dòng)的UIExtensionAbility為提供方,稱啟動(dòng)UIExtensionAbility的UIExtensionComponent組件為使用方。

開(kāi)發(fā)步驟

為了便于表述,本例中將提供UIExtensionAbility能力的一方稱為提供方,將啟動(dòng)UIExtensionAbility的一方稱為使用方,本例中使用方通過(guò)UIExtensionComponent容器啟動(dòng)UIExtensionAbility。

開(kāi)發(fā)UIExtensionAbility提供方

開(kāi)發(fā)者在實(shí)現(xiàn)一個(gè)UIExtensionAbility提供方時(shí),需要在DevEco Studio工程中手動(dòng)新建一個(gè)UIExtensionAbility,具體步驟如下。

  1. 在工程Module對(duì)應(yīng)的ets目錄下,右鍵選擇“New > Directory”,新建一個(gè)目錄并命名為uiextensionability。
  2. 在uiextensionability目錄,右鍵選擇“New > File”,新建一個(gè).ts文件并命名為UIExtensionAbility.ts。
  3. 打開(kāi)UIExtensionAbility.ts,導(dǎo)入U(xiǎn)IExtensionAbility的依賴包,自定義類繼承UIExtensionAbility并實(shí)現(xiàn)onCreate、onSessionCreate、onSessionDestroy、onForeground、onBackground和onDestroy生命周期回調(diào)。
    import Want from '@ohos.app.ability.Want';
    import UIExtensionAbility from '@ohos.app.ability.UIExtensionAbility';
    import UIExtensionContentSession from '@ohos.app.ability.    UIExtensionContentSession';
    
    const TAG: string = '[testTag] UIExtAbility '
    
    export default class UIExtAbility extends UIExtensionAbility {
      onCreate() {
        console.log(TAG, `onCreate`);
      }
    
      onForeground() {
        console.log(TAG, `onForeground`);
      }
    
      onBackground() {
        console.log(TAG, `onBackground`);
      }
    
      onDestroy() {
        console.log(TAG, `onDestroy`);
      }
    
      onSessionCreate(want: Want, session: UIExtensionContentSession) {
        console.log(TAG, `onSessionCreate, want: ${JSON.stringify(want)}}`);
        let storage: LocalStorage = new LocalStorage();
        storage.setOrCreate('session', session);
        session.loadContent('pages/Extension',storage);
      }
    
      onSessionDestroy(session: UIExtensionContentSession) {
        console.log(TAG, `onSessionDestroy`);
      }
    }
    
  4. UIExtensionAbility的onSessionCreate中加載了入口頁(yè)面文件pages/extension.ets, 并在entrysrcmainresourcesbaseprofilemain_pages.json文件中添加"pages/Extension"聲明,extension.ets內(nèi)容如下:
    import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession';
    
    let storage = LocalStorage.GetShared();
    const TAG: string = `[testTag] ExtensionPage`;
    
    @Entry(storage)
    @Component
    struct Extension {
      @State message: string = `UIExtension provider`;
      private session: UIExtensionContentSession | undefined = storage.get< UIExtensionContentSession >('session');
      onPageShow() {
        console.info(TAG, 'show');
      }
    
      build() {
        Row() {
          Column() {
            Text(this.message)
              .fontSize(30)
              .fontWeight(FontWeight.Bold)
              .textAlign(TextAlign.Center)
    
            Button("send data")
              .width('80%')
              .type(ButtonType.Capsule)
              .margin({
                top:20
              })
              .onClick(() = > {
                this.session?.sendData({ "data": 543321});
              })
    
            Button("terminate self")
              .width('80%')
              .type(ButtonType.Capsule)
              .margin({
                top:20
              })
              .onClick(() = > {
                this.session?.terminateSelf();
                storage.clear();
              })
    
            Button("terminate self with result")
              .width('80%')
              .type(ButtonType.Capsule)
              .margin({
                top:20
              })
              .onClick(() = > {
                this.session?.terminateSelfWithResult({
                  resultCode: 0,
                  want: {
                    bundleName:"com.example.uiextensiondemo",
                    parameters: { "result": 123456 }
                  }
                })
              })
            }
          }
        .height('100%')
      }
    }
    
  5. 在工程Module對(duì)應(yīng)的[module.json5配置文件]中注冊(cè)UIExtensionAbility,type標(biāo)簽需要設(shè)置為UIExtensionAbility中配置的對(duì)應(yīng)類型,srcEntry標(biāo)簽表示當(dāng)前UIExtensionAbility組件所對(duì)應(yīng)的代碼路徑。extensionProcessMode標(biāo)簽標(biāo)識(shí)多實(shí)例的進(jìn)程模型,此處以"bundle"為例。
    {
      "module": {
        "extensionAbilities": [
          {
            "name": "UIExtensionProvider",
            "srcEntry": "./ets/uiextensionability/UIExtensionAbility.ets",
            "description": "UIExtensionAbility",
            "type": "sys/commonUI",
            "exported": true,
            "extensionProcessMode": "bundle"
          },
        ]
      }
    }
    

開(kāi)發(fā)UIExtensionAbility使用方

開(kāi)發(fā)者可以在UIAbility的頁(yè)面中通過(guò)UIExtensionComponent容器加載自己應(yīng)用內(nèi)的UIExtensionAbility。 如在首頁(yè)文件:pages/Index.ets中添加如下內(nèi)容:
新文檔.png

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`
@Entry
@Component
struct Index {
  @State message: string = 'UIExtension User';
  private myProxy: UIExtensionProxy | undefined = undefined;

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(30)
          .size({ width: '100%', height: '50'})
          .fontWeight(FontWeight.Bold)
          .textAlign(TextAlign.Center)

        UIExtensionComponent(
          {
            bundleName: 'com.example.uiextensiondemo',
            abilityName: 'UIExtensionProvider',
            moduleName: 'entry',
            parameters: {
              'ability.want.params.uiExtensionType': 'sys/commonUI',
            }
          })
          .onRemoteReady((proxy) = > {
            this.myProxy = proxy;
          })
          .onReceive((data) = > {
            this.message = JSON.stringify(data);
          })
          .onResult((data) = > {
            this.message = JSON.stringify(data);
          })
          .onRelease((code) = > {
            this.message = "release code:" + code;
          })
          .offset({ x: 0, y: 30})
          .size({ width: 300, height: 300})
          .border({ width: 5, color: 0x317AF7, radius: 10, style: BorderStyle.Dotted})

        Button("sendData")
          .type(ButtonType.Capsule)
          .offset({ x: 0,y: 60})
          .width('80%')
          .type(ButtonType.Capsule)
          .margin({
            top: 20
          })
          .onClick(() = > {
            this.myProxy?.send({
              "data": 123456,
              "message": "data from component"
            })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

審核編輯 黃宇

聲明:本文內(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

    文章

    398

    瀏覽量

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

    關(guān)注

    57

    文章

    2302

    瀏覽量

    42689
收藏 人收藏

    評(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 ?2184次閱讀
    <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對(duì)應(yīng)的窗口,連接
    的頭像 發(fā)表于 05-06 16:31 ?904次閱讀
    <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框架:【 (Context模塊)】

    Context模塊提供了ability或application的上下文的能力,包括允許訪問(wèn)特定于應(yīng)用程序的資源、請(qǐng)求和驗(yàn)證權(quán)限等。
    的頭像 發(fā)表于 05-13 16:04 ?654次閱讀
    <b class='flag-5'>鴻蒙</b>開(kāi)發(fā)接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【 (Context模塊)】

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

    AbilityDelegator提供添加用于監(jiān)視指定能力的生命周期狀態(tài)更改的AbilityMonitor對(duì)象的能力,包括對(duì)AbilityMonitor實(shí)例的添加、刪除、等待ability到達(dá)
    的頭像 發(fā)表于 05-13 17:58 ?910次閱讀
    <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】

    AbilityDelegator提供添加用于監(jiān)視指定能力的生命周期狀態(tài)更改的AbilityMonitor對(duì)象的能力,包括對(duì)AbilityMonitor實(shí)例的添加、刪除、等待ability到達(dá)
    的頭像 發(fā)表于 05-16 16:48 ?891次閱讀
    <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類型的ExtensionAbility組件,提供后臺(tái)服務(wù)能力,其內(nèi)部持有了一個(gè)[ServiceExtensionContext],通過(guò)[ServiceExtensionContext]提供了豐富的接口供外部使用。
    的頭像 發(fā)表于 06-04 14:50 ?1081次閱讀
    <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開(kāi)發(fā)-Stage模型下Ability的創(chuàng)建和使用

    函數(shù) HiLog日志系統(tǒng)可以讓?xiě)?yīng)用按照指定類型、指定級(jí)別、指定格式字符串打印日志內(nèi)容,幫助開(kāi)發(fā)者了解應(yīng)用/服務(wù)的運(yùn)行狀態(tài),更好地調(diào)試程序。 HiLog提供了debug、info、warn、error以及fatal
    發(fā)表于 01-08 15:34

    HarmonyOS NEXT Developer Beta1中的Kit

    、AI六大領(lǐng)域,例如: 應(yīng)用框架相關(guān)Kit開(kāi)放能力:Ability Kit程序框架
    發(fā)表于 06-26 10:47

    跟阿斌一起學(xué)鴻蒙(2): Ability vs App?

    的方式來(lái)實(shí)現(xiàn)這些功能,避免過(guò)早的頭禿。# 2. AbilityAbility,就是鴻蒙OS為程序員們提供的基礎(chǔ)設(shè)施之一。## Ability
    發(fā)表于 11-30 20:56

    鴻蒙應(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 ?557次閱讀
    <b class='flag-5'>鴻蒙</b>應(yīng)用模型:【<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>】簡(jiǎn)介

    鴻蒙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 ?257次閱讀
    <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 ?461次閱讀
    <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 ?435次閱讀
    <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ù))【應(yīng)用啟動(dòng)框架AppStartup】

    `AppStartup`提供了一種更加簡(jiǎn)單高效的初始化組件的方式,支持異步初始化組件加速應(yīng)用的啟動(dòng)時(shí)間。使用啟動(dòng)框架應(yīng)用開(kāi)發(fā)者只需要分別為待初始化的組件實(shí)現(xiàn)`AppStartup`提供
    的頭像 發(fā)表于 06-10 18:38 ?652次閱讀

    鴻蒙開(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 ?377次閱讀
    <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ù)管理