色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-05 09:19 ? 次閱讀

UIExtensionAbility

概述

[UIExtensionAbility]是UI類型的ExtensionAbility組件,需要與[UIExtensionComponent]一起配合使用,開發者可以在UIAbility的頁面中通過UIExtensionComponent嵌入提供方應用的UIExtensionAbility提供的UI。UIExtensionAbility會在獨立于UIAbility的進程中運行,完成其頁面的布局和渲染。常用于有進程隔離訴求的系統彈窗、狀態欄、膠囊等模塊化開發的場景。

說明:
開發前請熟悉鴻蒙開發指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]
當前UIExtensionAbility和UIExtensionComponent僅支持系統應用使用。

生命周期

[UIExtensionAbility]提供了onCreate、onSessionCreate、onSessionDestroy、onForeground、onBackground和onDestroy生命周期回調,根據需要重寫對應的回調方法。

  • [ onCreate ]:當UIExtensionAbility創建時回調,執行初始化業務邏輯操作。
  • [ onSessionCreate ]:當UIExtensionAbility界面內容對象創建后調用。
  • [ onSessionDestroy ]:當UIExtensionAbility界面內容對象銷毀后調用。
  • [ onForeground ]:當UIExtensionAbility從后臺轉到前臺時觸發。
  • [ onBackground ]:當UIExtensionAbility從前臺轉到后臺時觸發。
  • [ onDestroy ]:當UIExtensionAbility銷毀時回調,可以執行資源清理等操作。

選擇合適的UIExtensionAbility進程模型

UIExtensionAbility支持多實例,每個嵌入式顯示對應一個UIExtensionAbility實例。多實例場景下默認是多進程,可配置多進程模型。 UIExtensionAbility支持多實例,每個嵌入式顯示對應一個UIExtensionAbility實例。 當應用中存在多個UIExtensionAbility實例,這些實例可以為多個獨立進程,也可以共用同一個進程,還可以分為多組、同組實例共用同一個進程。通過module.json5配置文件中的extensionProcessMode字段,即可為選擇對應的進程模型,三種模型對比如下:

進程模型extensionProcessMode字段配置說明
同一bundle中所有UIExtensionAbility共進程bundleUIExtensionAbility實例之間的通信無需跨IPC通信;實例之間的狀態不獨立,會存在相互影響。
相同name的UIExtensionAbility共進程type將同UIExtensionAbility類配置在同一個進程下,便于應用針對UIExtensionAbility類型對實例進行管理。
每個UIExtensionAbility為獨立進程instanceUIExtensionAbility實例之間的狀態不會彼此影響,安全性更高;實例之間只能通過跨進程進行通信。

Bundle中的所有UIExtensionAbility共進程

同一個bundle下的UIExtensionAbility配置在同一個進程中,便于多實例間的通信。需要關注的是,各個實例之間的狀態會彼此影響,當進程中的一個實例異常退出,將導致進程中所有的實例也都會退出;

圖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 根據上述代碼,生成的Index頁面如下:
uiextension-bundle-example

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

同UIExtensionAbility類的所有UIExtensionAbility共進程

根據UIExtensionAbility類進行分配進程,拉起多個同樣的UIExtensionAbility實例時,這些實例將配置在同一個進程中。將同UIExtensionAbility類配置在同一個進程下,方便應用針對UIExtensionAbility類型對實例進行管理;

圖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 根據上述代碼,生成的Index頁面如下:
uiextability-type-example

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

UIExtensionAbility實例獨立進程

根據UIExtensionAbility實例進行分配進程,配置了instance的UIExtensionAbility實例,將每個實例獨立一個進程。獨立進程的場景下,UIExtensionAbility實例之間只能通過跨進程進行通信,但實例之間的狀態不會彼此影響,安全性更高;

圖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 根據上述代碼,生成的Index頁面如下:
uiextability-instance-example

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

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

開發步驟

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

開發UIExtensionAbility提供方

開發者在實現一個UIExtensionAbility提供方時,需要在DevEco Studio工程中手動新建一個UIExtensionAbility,具體步驟如下。

  1. 在工程Module對應的ets目錄下,右鍵選擇“New > Directory”,新建一個目錄并命名為uiextensionability。
  2. 在uiextensionability目錄,右鍵選擇“New > File”,新建一個.ts文件并命名為UIExtensionAbility.ts。
  3. 打開UIExtensionAbility.ts,導入UIExtensionAbility的依賴包,自定義類繼承UIExtensionAbility并實現onCreate、onSessionCreate、onSessionDestroy、onForeground、onBackground和onDestroy生命周期回調。
    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中加載了入口頁面文件pages/extension.ets, 并在entrysrcmainresourcesbaseprofilemain_pages.json文件中添加"pages/Extension"聲明,extension.ets內容如下:
    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對應的[module.json5配置文件]中注冊UIExtensionAbility,type標簽需要設置為UIExtensionAbility中配置的對應類型,srcEntry標簽表示當前UIExtensionAbility組件所對應的代碼路徑。extensionProcessMode標簽標識多實例的進程模型,此處以"bundle"為例。
    {
      "module": {
        "extensionAbilities": [
          {
            "name": "UIExtensionProvider",
            "srcEntry": "./ets/uiextensionability/UIExtensionAbility.ets",
            "description": "UIExtensionAbility",
            "type": "sys/commonUI",
            "exported": true,
            "extensionProcessMode": "bundle"
          },
        ]
      }
    }
    

開發UIExtensionAbility使用方

開發者可以在UIAbility的頁面中通過UIExtensionComponent容器加載自己應用內的UIExtensionAbility。 如在首頁文件:pages/Index.ets中添加如下內容:
新文檔.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%')
  }
}

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 框架
    +關注

    關注

    0

    文章

    403

    瀏覽量

    17475
  • 鴻蒙
    +關注

    關注

    57

    文章

    2339

    瀏覽量

    42805
收藏 人收藏

    評論

    相關推薦

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

    Ability模塊提供對Ability生命周期、上下文環境等調用管理的能力,包括Ability創建、銷毀、轉儲客戶端信息等。
    的頭像 發表于 04-30 17:42 ?2254次閱讀
    <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 ?999次閱讀
    <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 ?713次閱讀
    <b class='flag-5'>鴻蒙</b>開發接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【 (Context模塊)】

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

    AbilityDelegator提供添加用于監視指定能力的生命周期狀態更改的AbilityMonitor對象的能力,包括對AbilityMonitor實例的添加、刪除、等待ability到達
    的頭像 發表于 05-13 17:58 ?953次閱讀
    <b class='flag-5'>鴻蒙</b>開發接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【(AbilityDelegator)】

    鴻蒙開發接口Ability框架:【AbilityDelegator】

    AbilityDelegator提供添加用于監視指定能力的生命周期狀態更改的AbilityMonitor對象的能力,包括對AbilityMonitor實例的添加、刪除、等待ability到達
    的頭像 發表于 05-16 16:48 ?930次閱讀
    <b class='flag-5'>鴻蒙</b>開發接口<b class='flag-5'>Ability</b><b class='flag-5'>框架</b>:【AbilityDelegator】

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

    [ServiceExtensionAbility]是SERVICE類型的ExtensionAbility組件,提供后臺服務能力,其內部持有了一個[ServiceExtensionContext],通過[ServiceExtensionContext]提供了豐富的接口供外部使用。
    的頭像 發表于 06-04 14:50 ?1198次閱讀
    <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>)【ServiceExtensionAbility】

    鴻蒙Ability開發-Stage模型下Ability的創建和使用

    函數 HiLog日志系統可以讓應用按照指定類型、指定級別、指定格式字符串打印日志內容,幫助開發者了解應用/服務的運行狀態,更好地調試程序。 HiLog提供了debug、info、warn、error以及fatal
    發表于 01-08 15:34

    HarmonyOS NEXT Developer Beta1中的Kit

    、AI六大領域,例如: 應用框架相關Kit開放能力:Ability Kit程序框架
    發表于 06-26 10:47

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)綜述

    一、綜述 Intents Kit(意圖框架服務)是HarmonyOS級的意圖標準體系 ,意圖連接了應用/元服務內的業務功能。 意圖框架能幫開
    發表于 11-28 10:43

    鴻蒙應用模型:【Ability Kit】簡介

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

    鴻蒙Ability Kit程序框架服務)【Ability內頁面間的跳轉】

    基于Stage模型下的Ability開發,實現Ability內頁面間的跳轉和數據傳遞。
    的頭像 發表于 06-03 20:43 ?296次閱讀
    <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>內頁面間的跳轉】

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

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

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

    本示例展示通過[IDL的方式]和?[@ohos.rpc]?等接口實現了Ability與ServiceExtensionAbility之間的通信。
    的頭像 發表于 06-05 09:28 ?480次閱讀
    <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程序框架服務)【應用啟動框架AppStartup】

    `AppStartup`提供了一種更加簡單高效的初始化組件的方式,支持異步初始化組件加速應用的啟動時間。使用啟動框架應用開發者只需要分別為待初始化的組件實現`AppStartup`提供
    的頭像 發表于 06-10 18:38 ?701次閱讀

    鴻蒙開發Ability Kit程序框架服務:任務管理

    AbilityRecord:系統服務側管理一個UIAbility實例的最小單元,對應一個應用側的UIAbility組件實例。系統服務側管理UIAbility實例數量上限為512個。
    的頭像 發表于 06-24 14:46 ?442次閱讀
    <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>:任務管理
    主站蜘蛛池模板: 四虎影视国产精品亚洲精品hd | 全黄H全肉禁乱公| 色婷婷AV99XX| 亚洲幼女网| a亚洲在线观看不卡高清| 国产精品福利片| 久久99re7在线视频精品| 欧美黑人巨大videos免费| 午夜爱情动作片P| 亚洲综合色五月久久婷婷| 99这里只有是精品2| 国产麻豆精品传媒AV国产在线| 久久亚洲一级α片| 入禽太深在线观看免费高清| 野花社区WWW韩国日本 | 美女张开腿露尿口给男人亲| 色婷婷五月综合中文字幕| 夜夜躁婷婷AV蜜桃视频| 动漫美女无衣| 国产美女久久久久久久久久久| 麻豆国产精品va在线观看约| 丝袜足控免费网站xx91| 91夫妻交友论坛| 精品国产5g影院天天爽| 日韩免费一级毛片| 综合色一色综合久久网vr| 国产欧美一区二区三区免费| 捏揉舔水插按摩师| 亚洲涩福利高清在线| 二色AV天堂在线| 免费国产久久啪久久爱| 亚洲精品成人a在线观看| 超碰免费视频部落格| 妈妈的朋友6未删减版完整在线| 亚洲 日韩 国产 制服 在线| 澳大利亚剧满足在线观看| 久久久久久九九| 亚洲高清免费在线观看| 荡乳乱公小说| 欧美深深色噜噜狠狠yyy| 中文字幕本庄优花喂奶|