当前位置: 首页 > news >正文

HarmonyOS Next开发学习手册——ExtensionAbility

概述

EmbeddedUIExtensionAbility 是EMBEDDED_UI类型的ExtensionAbility组件,提供了跨进程界面嵌入的能力。

EmbeddedUIExtensionAbility需要和 EmbeddedComponent 一起配合使用,开发者可以在UIAbility的页面中通过EmbeddedComponent嵌入本应用的EmbeddedUIExtensionAbility提供的UI。EmbeddedUIExtensionAbility会在独立于UIAbility的进程中运行,完成其页面的布局和渲染。通常用于有进程隔离诉求的模块化开发场景。

说明

  1. 当前EmbeddedUIExtensionAbility和EmbeddedComponent仅支持在拥有多进程配置的设备上使用。
  2. EmbeddedComponent只能在UIAbility中使用,且被拉起的EmbeddedUIExtensionAbility需与UIAbility属于同一应用。
  3. 当前提供的EmbeddedUIExtensionAbility支持多实例场景,并且继承了UIExtensionAbility的进程模型。

EmbeddedUIExtensionAbility通过 UIExtensionContext 和 UIExtensionContentSession 提供相关能力。本文描述中称被启动的EmbeddedUIExtensionAbility为提供方,称启动EmbeddedUIExtensionAbility的EmbeddedComponent组件为使用方。

开发EmbeddedUIExtensionAbility提供方

生命周期

EmbeddedUIExtensionAbility 提供了onCreate、onSessionCreate、onSessionDestroy、onForeground、onBackground和onDestroy生命周期回调,根据需要重写对应的回调方法。

  • onCreate:当EmbeddedUIExtensionAbility创建时回调,执行初始化业务逻辑操作。
  • onSessionCreate:当EmbeddedUIExtensionAbility界面内容对象创建后调用。
  • onSessionDestroy:当EmbeddedUIExtensionAbility界面内容对象销毁后调用。
  • onForeground:当EmbeddedUIExtensionAbility从后台转到前台时触发。
  • onBackground:当EmbeddedUIExtensionAbility从前台转到后台时触发。
  • onDestroy:当EmbeddedUIExtensionAbility销毁时回调,可以执行资源清理等操作。

开发步骤

开发者在实现一个EmbeddedUIExtensionAbility提供方时,需要在DevEco Studio工程中手动新建一个EmbeddedUIExtensionAbility,具体步骤如下。

  1. 在工程Module对应的ets目录下,右键选择“New > Directory”,新建一个目录并命名为EmbeddedUIExtAbility。

  2. 在EmbeddedUIExtAbility目录,右键选择“New > File”,新建一个.ts文件并命名为EmbeddedUIExtAbility.ts。

  3. 打开EmbeddedUIExtAbility.ts文件,导入EmbeddedUIExtensionAbility的依赖包,自定义类继承EmbeddedUIExtensionAbility并实现onCreate、onSessionCreate、onSessionDestroy、onForeground、onBackground和onDestroy生命周期回调。

import EmbeddedUIExtensionAbility from '@ohos.app.ability.EmbeddedUIExtensionAbility'
import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession'
import Want from '@ohos.app.ability.Want';const TAG: string = '[ExampleEmbeddedAbility]'
export default class ExampleEmbeddedAbility extends EmbeddedUIExtensionAbility {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 param: Record<string, UIExtensionContentSession> = {'session': session};let storage: LocalStorage = new LocalStorage(param);session.loadContent('pages/extension', storage);}onSessionDestroy(session: UIExtensionContentSession) {console.log(TAG, `onSessionDestroy`);}
}
  1. EmbeddedUIExtensionAbility的onSessionCreate中加载了入口页面文件pages/extension.ets内容如下:
import UIExtensionContentSession from '@ohos.app.ability.UIExtensionContentSession';let storage = LocalStorage.getShared()@Entry(storage)
@Component
struct Extension {@State message: string = 'EmbeddedUIExtensionAbility Index';private session: UIExtensionContentSession | undefined = storage.get<UIExtensionContentSession>('session');build() {Column() {Text(this.message).fontSize(20).fontWeight(FontWeight.Bold)Button("terminateSelfWithResult").fontSize(20).onClick(() => {this.session?.terminateSelfWithResult({resultCode: 1,want: {bundleName: "com.example.embeddeddemo",abilityName: "ExampleEmbeddedAbility",}});})}.width('100%').height('100%')}
}
  1. 在工程Module对应的 module.json5配置文件 中注册EmbeddedUIExtensionAbility,type标签需要设置为“embeddedUI”,srcEntry标签表示当前EmbeddedUIExtensionAbility组件所对应的代码路径。
{"module": {"extensionAbilities": [{"name": "EmbeddedUIExtAbility","icon": "$media:icon","description": "EmbeddedUIExtAbility","type": "embeddedUI","srcEntry": "./ets/EmbeddedUIExtAbility/EmbeddedUIExtAbility.ts"},]}
}

开发EmbeddedUIExtensionAbility使用方

开发者可以在UIAbility的页面中通过EmbeddedComponent容器加载自己应用内的EmbeddedUIExtensionAbility。此外,EmbeddedUIExtensionAbility在want.parameters中新增了两个字段ohos.extension.processMode.hostSpecified和ohos.extension.processMode.hostInstance。

  • ohos.extension.processMode.hostSpecified控制非首次启动的EmbeddedUIExtensionAbility是否运行在同UIExtensionAbility的进程中,参数是进程名称。例如,“ohos.extension.processMode.hostSpecified”: “com.ohos.inentexecutedemo:share”。
  • ohos.extension.processMode.hostInstance控制启动的EmbeddedUIExtensionAbility是否按照独立进程启动,传入false时,按照UIExtensionAbility的进程模型启动,入参true的时候,不管被拉起的UIExtensionAbility配置的是什么进程模型,都会新增一个进程,例如,“ohos.extension.processMode.hostInstance”: “true”。

ohos.extension.processMode.hostSpecified和ohos.extension.processMode.hostInstance同时配置时,hostSpecified优先,会运行在指定的进程中。

如在首页文件:pages/Index.ets中添加如下内容:

import { Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';@Entry
@Component
struct Index {@State message: string = 'Message: 'private want: Want = {bundleName: "com.example.embeddeddemo",abilityName: "EmbeddedUIExtAbility",parameters: {'ohos.extension.processMode.hostInstance': 'true'}}build() {Row() {Column() {Text(this.message).fontSize(30)EmbeddedComponent(this.want, EmbeddedType.EMBEDDED_UI_EXTENSION).width('100%').height('90%').onTerminated((info: TerminationInfo) => {this.message = 'Terminarion: code = ' + info.code + ', want = ' + JSON.stringify(info.want);}).onError((error: BusinessError) => {this.message = 'Error: code = ' + error.code;})}.width('100%')}.height('100%')}
}

鸿蒙全栈开发全新学习指南

也为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线【包含了大厂APP实战项目开发】

本路线共分为四个阶段:

第一阶段:鸿蒙初中级开发必备技能

在这里插入图片描述

第二阶段:鸿蒙南北双向高工技能基础:gitee.com/MNxiaona/733GH

第三阶段:应用开发中高级就业技术

第四阶段:全网首发-工业级南向设备开发就业技术:gitee.com/MNxiaona/733GH

鸿蒙开发面试真题(含参考答案):gitee.com/MNxiaona/733GH

写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:gitee.com/MNxiaona/733GH

http://www.lryc.cn/news/381959.html

相关文章:

  • 如何开发企业微信SCRM
  • Java中的标准注解与数据校验:深入解析与实例
  • 模型泛化性测试
  • 智能推荐系统:技术解析与实践指南
  • 盛元广通数字孪生智能集控实验室管理系统
  • Spring Boot 优雅进行数据脱敏
  • Vue3 条件语句
  • 小白想要快速学好office办公软件,主要学习以下几个方面?
  • 【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结
  • 爱迪特两年创业板上市路:销售费用率远高同行,侵权风险引关注
  • SQLite 与 Python:集成与使用
  • 【vue scrollTo 数据无限滚动 】
  • MinIO在Linux环境中的使用
  • 免费内网穿透工具 ,快解析内网穿透解决方案
  • 踩坑——VS添加相对路径
  • HTML【介绍】
  • 网络安全:Web 安全 面试题.(XSS)
  • Ubuntu网络管理命令:netstat
  • CV预测:快速使用DenseNet神经网络
  • 竞赛选题 python 机器视觉 车牌识别 - opencv 深度学习 机器学习
  • zerotier-one自建根服务器方法二
  • 【论文通读】SeeClick: Harnessing GUI Grounding for Advanced Visual GUI Agents
  • Ubuntu20.04离线安装Docker
  • AI大模型战争:通用与垂直,谁将领跑未来?
  • 计算机网络之TCP的三次握手和四次挥手
  • JupyterLab使用指南(八):更改JupterLab左侧默认打开目录
  • Android SurfaceFlinger——HWC Adapter初始化(五)
  • 泛微开发修炼之旅--17基于Ecology短信平台,实现后端自定义二开短信发送方案及代码示例
  • SpringMVC系列二: 请求方式介绍
  • 大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展