【愚公系列】2023年12月 HarmonyOS教学课程 043-Stage模型(ExtensionAbility组件)

在这里插入图片描述

🏆 作者简介,愚公搬代码
🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,51CTO博客专家等。
🏆《近期荣誉》:2023年华为云十佳博主,2022年CSDN博客之星TOP2,2022年华为云十佳博主等。
🏆《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
🏆🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀一、ExtensionAbility组件
    • 🔎1.概念
    • 🔎2.FormExtensionAbility
      • 🦋2.1 基本概念
      • 🦋2.2 onAddForm
      • 🦋2.3 onCastToNormalForm
      • 🦋2.4 onUpdateForm
      • 🦋2.5 onChangeFormVisibility
      • 🦋2.6 onFormEvent
      • 🦋2.7 onRemoveForm
      • 🦋2.8 onConfigurationUpdate
      • 🦋2.9 onAcquireFormState
    • 🔎3.WorkSchedulerExtensionAbility
      • 🦋3.1 导入模块
      • 🦋3.2 onWorkStart
      • 🦋3.3 onWorkStop
  • 🚀感谢:给读者的一封信


🚀一、ExtensionAbility组件

🔎1.概念

HarmonyOS中的ExtensionAbility组件是一种能够扩展系统功能的能力组件。它可以通过扩展系统能力接口,为应用程序提供一些特定的功能,以满足应用程序的特殊需求。

ExtensionAbility组件的特点包括:

  1. 系统组件:ExtensionAbility是一种系统级组件,可以通过系统能力管理器进行注册和管理。
  2. 功能扩展:ExtensionAbility通过扩展系统能力接口,为应用程序提供一些特定的功能,如地理位置、传感器、网络访问等。
  3. 生命周期管理:ExtensionAbility具有自己的生命周期管理,可以根据应用程序的需要进行启动、停止和销毁。
  4. 权限控制:ExtensionAbility可以通过权限控制机制限制应用程序对系统能力的访问权限,保护用户的隐私和安全。
  5. 多样性:HarmonyOS支持多种类型的ExtensionAbility,包括Ability、ServiceAbility、DataAbility等,可以根据应用程序的需求灵活选择。

通过使用ExtensionAbility组件,开发者可以更好地与系统进行集成,提供更丰富的功能和体验。

支持的ExtensionAbility类型有:

ExtensionAbility类型描述
FormExtensionAbilityFORM类型的ExtensionAbility组件,用于提供服务卡片场景相关能力。
WorkSchedulerExtensionAbilityWORK_SCHEDULER类型的ExtensionAbility组件,用于提供延迟任务注册、取消、查询的能力。

还有其他可以参考官方文档:https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/js-apis-bundlemanager-0000001427585060-V3#ZH-CN_TOPIC_0000001573928977__extensionabilitytype

在这里插入图片描述

🔎2.FormExtensionAbility

FormExtensionAbility为卡片扩展模块,提供卡片创建、销毁、刷新等生命周期回调。

🦋2.1 基本概念

import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
名称类型可读可写说明
contextFormExtensionContextFormExtensionAbility的上下文环境,继承自ExtensionContext。

🦋2.2 onAddForm

onAddForm()是卡片提供方接收创建卡片的通知接口,onAddForm方法用于处理添加表单的事件。当应用程序在系统中添加一个新的表单时,系统会调用这个方法来通知应用程序。

在onAddForm方法中实现具体的处理逻辑,例如创建表单对应的页面或者更新现有的表单内容。可以使用FormBindingData对象来获取表单的数据,FormBindingData对象包含了表单的各个字段的值。

import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
import formBindingData from'@ohos.app.form.formBindingData';export default class MyFormExtensionAbility extends FormExtensionAbility {onAddForm(want) {console.log('FormExtensionAbility onAddForm, want:' + want.abilityName);let dataObj1 = {temperature:'11c','time':'11:00'};let obj1 = formBindingData.createFormBindingData(dataObj1);return obj1;}
}

在这里插入图片描述

🦋2.3 onCastToNormalForm

onCastToNormalForm()是卡片提供方接收临时卡片转常态卡片的通知接口,onCastToNormalForm()方法用于将扩展表单转换为普通表单的回调方法。当用户选择将扩展表单转换为普通表单时,系统会调用此方法。

在该方法中,开发者可以执行以下操作:

  • 停止扩展表单的任何后台任务或计时器。
  • 释放扩展表单的资源。
  • 将扩展表单转换为普通表单。
export default class MyFormExtensionAbility extends FormExtensionAbility {onCastToNormalForm(formId) {console.log('FormExtensionAbility onCastToNormalForm, formId:' + formId);}
}

在这里插入图片描述

🦋2.4 onUpdateForm

onUpdateForm()是卡片提供方接收更新卡片的通知接口。获取最新数据后调用formProvider的updateForm接口刷新卡片数据,

onUpdateForm方法具有以下特点:

  • onUpdateForm方法是在表单数据发生改变时触发的回调方法。
  • onUpdateForm方法有两个参数:参数一为表单的全局唯一标识符formId,参数二为表单的数据。
  • onUpdateForm可以通过formId来判断是哪个表单发生了改变,从而进行相应的处理。
  • onUpdateForm方法中可以对表单数据进行处理,例如更新UI界面或者进行其他相关操作。
import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
import formBindingData from '@ohos.app.form.formBindingData';
import formProvider from '@ohos.app.form.formProvider';export default class MyFormExtensionAbility extends FormExtensionAbility {onUpdateForm(formId) {console.log('FormExtensionAbility onUpdateForm, formId: ${formId}');let obj2 = formBindingData.createFormBindingData({temperature: '22c',time: '22:00'});formProvider.updateForm(formId, obj2).then((data) => {console.log('FormExtensionAbility context updateForm, data: ${data}');}).catch((error) => {console.error('Operation updateForm failed. Cause: ${error}');});}
};

在这里插入图片描述

🦋2.5 onChangeFormVisibility

onChangeFormVisibility()是卡片提供方接收修改可见性的通知接口,onChangeFormVisibility方法是在扩展页面的可见性发生变化时被调用的回调方法。当扩展页面从不可见状态变为可见状态,或者从可见状态变为不可见状态时,该方法会被自动调用。

该方法的原型是:

public void onChangeFormVisibility(boolean isVisible)

在方法中,可以根据isVisible参数的值来执行相应的操作。当isVisible为true时,表示扩展页面变为可见状态,可以进行相关的UI更新和数据加载等操作。当isVisible为false时,表示扩展页面变为不可见状态,可以进行相关的资源释放和停止后台任务等操作。

import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
import formBindingData from '@ohos.app.form.formBindingData';
import formProvider from '@ohos.app.form.formProvider';export default class MyFormExtensionAbility extends FormExtensionAbility {onChangeFormVisibility(newStatus) {console.log('FormExtensionAbility onChangeFormVisibility, newStatus: ${newStatus}');let obj2 = formBindingData.createFormBindingData({temperature: '22c',time: '22:00'});for (let key in newStatus) {console.log('FormExtensionAbility onChangeFormVisibility, key: ${key}, value= ${newStatus[key]}');formProvider.updateForm(key, obj2).then((data) => {console.log('FormExtensionAbility context updateForm, data: ${data}');}).catch((error) => {console.error('Operation updateForm failed. Cause: ${error}');});}}
};

在这里插入图片描述

🦋2.6 onFormEvent

onFormEvent()是卡片提供方接收处理卡片事件的通知接口,onFormEvent()方法是用来处理表单事件的回调方法。

表单事件包括表单创建、表单更新和表单销毁三种类型。当有这些事件发生时,系统会调用FormExtensionAbility的onFormEvent()方法,并将相应的事件类型和表单事件对象作为参数传递给该方法。

可以重写onFormEvent()方法,根据事件类型来处理相应的业务逻辑。比如,在表单创建事件中,可以通过表单事件对象获取表单实例,并进行初始化操作;在表单更新事件中,可以根据表单事件对象获取更新后的表单数据,并进行界面刷新等操作;在表单销毁事件中,可以进行资源释放等清理工作。

export default class MyFormExtension extends FormExtensionAbility {onFormEvent(formId, message) {console.log('FormExtensionAbility onFormEvent, formId:' + formId + ', message:' + message);}
}

在这里插入图片描述

🦋2.7 onRemoveForm

onRemoveForm()是卡片提供方接收销毁卡片的通知接口,onRemoveForm方法用于在扩展中移除表单时进行处理。当主应用或者其他应用移除了扩展中的一个表单时,该方法会被调用。

具体来说,onRemoveForm方法的作用是在表单被移除时执行一些清理工作,例如释放资源、取消注册监听器等等。开发者可以重写此方法,根据实际需求来进行处理。

export default class MyFormExtensionAbility extends FormExtensionAbility {onRemoveForm(formId) {console.log('FormExtensionAbility onRemoveForm, formId:' + formId);}
}

在这里插入图片描述

🦋2.8 onConfigurationUpdate

onConfigurationUpdate()是当系统配置更新时调用,onConfigurationUpdate方法用于处理配置更新的逻辑。当系统配置(例如屏幕方向、语言等)发生变化时,系统会调用该方法。

onConfigurationUpdate方法有一个参数,即新的Configuration对象。开发者可以通过该对象获取最新的配置信息,并根据需要进行相应的处理,例如重新加载界面、更新数据等。

class MyFormExtensionAbility extends FormExtensionAbility {onConfigurationUpdate(config) {console.log('onConfigurationUpdate, config:' + JSON.stringify(config));}
}

在这里插入图片描述

🦋2.9 onAcquireFormState

onAcquireFormState()是卡片提供方接收查询卡片状态通知接口,默认返回卡片初始状态,FormExtensionAbility的onAcquireFormState()方法用于获取表单的状态。

具体来说,当扩展表单Ability首次启动时,onAcquireFormState()会被调用。开发者可以在此方法中获取表单的初始状态,并返回给系统。

import formInfo from '@ohos.app.form.formInfo';
class MyFormExtensionAbility extends FormExtensionAbility {onAcquireFormState(want) {console.log('FormExtensionAbility onAcquireFormState, want:' + want);return formInfo.FormState.UNKNOWN;}
}

在这里插入图片描述

🔎3.WorkSchedulerExtensionAbility

WorkSchedulerExtensionAbility主要是延迟任务调度回调

🦋3.1 导入模块

import WorkSchedulerExtensionAbility from '@ohos.WorkSchedulerExtensionAbility'

🦋3.2 onWorkStart

onWorkStart()是延迟任务调度开始回调,onWorkStart方法是当一个定时任务开始时被调用的。当定时任务启动时,系统会调用该方法来执行相关的逻辑操作。

export default class MyWorkSchedulerExtensionAbility extends WorkSchedulerExtensionAbility {onWorkStart(workInfo) {console.log('MyWorkSchedulerExtensionAbility onWorkStart' + JSON.stringify(workInfo));}
}

在这里插入图片描述

🦋3.3 onWorkStop

onWorkStart()是延迟任务调度开始回调,onWorkStop方法是在工作调度停止时被调用的。在该方法中,开发者可以处理一些在工作停止时需要执行的逻辑。

export default class MyWorkSchedulerExtensionAbility extends WorkSchedulerExtensionAbility {onWorkStop(workInfo) {console.log('MyWorkSchedulerExtensionAbility onWorkStop' + JSON.stringify(workInfo));}
}

在这里插入图片描述


🚀感谢:给读者的一封信

亲爱的读者,

我在这篇文章中投入了大量的心血和时间,希望为您提供有价值的内容。这篇文章包含了深入的研究和个人经验,我相信这些信息对您非常有帮助。

如果您觉得这篇文章对您有所帮助,我诚恳地请求您考虑赞赏1元钱的支持。这个金额不会对您的财务状况造成负担,但它会对我继续创作高质量的内容产生积极的影响。

我之所以写这篇文章,是因为我热爱分享有用的知识和见解。您的支持将帮助我继续这个使命,也鼓励我花更多的时间和精力创作更多有价值的内容。

如果您愿意支持我的创作,请扫描下面二维码,您的支持将不胜感激。同时,如果您有任何反馈或建议,也欢迎与我分享。

在这里插入图片描述

再次感谢您的阅读和支持!

最诚挚的问候, “愚公搬代码”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Storm实战】1.1 图解Storm的抽象概念

文章目录 0. 前言1. Storm 中的抽象概念1.1 流 (Stream)1.2 拓扑 (Topology)1.3 Spout1.4 Bolt1.5 任务 (Task)1.6 工作者 (Worker) 2. 形象的理解Storm的抽象概念2.1 流 (Stream)2.2 拓扑 (Topology)2.3 Spout2.4 Bolt2.5 任务 (Task)2.6 工作者 (Worker)场景1场景2 3.参考文档…

详解CAS及ABA问题

🌈🌈🌈今天给大家分享的是 CAS 问题。 清风的CSDN博客 🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! ✈️✈️✈️动动…

Hex2Bin转换软件、Bootloader 、OTA加密升级 、STM32程序加密、其他MCU同样适用

说明:这个工具可以将 Hex 文件 转换为 Bin 格式文件,软件是按自己开发 STM32 OAT 功能需求开发的一款辅助 上位机软件。 文中的介绍时 bootloader boot 文档在补充完善中... 有兴趣的朋友可留言探讨。 1. 软件功能: 1.生成 bin&#x…

基于模块自定义扩展字段的后端逻辑实现(二)

目录 一:创建表 二:代码逻辑 上一节我们详细讲解了自定义扩展字段的逻辑实现和表的设计,这一节我们以一个具体例子演示下,如何实现一个订单模块的自定义扩展数据。 一:创建表 订单主表: CREATE TABLE t_order ( …

VSCode C/C++(gdb)调试指南

1、安装插件 2、F5开启调试 左侧侧边栏->确保打开回调栈 右键函数栈->查看反汇编 3、打印寄存器、函数反汇编等 命令: 查看main反汇编 -exec disassemble /m main 查看寄存器 -exec info r 打印某个变量 -exec print s 或者 --s 打印寄存器,如p…

如何在没有密码的情况下将 iPhone 13/14/15 恢复出厂设置

您想知道如何在没有密码的情况下将 iPhone 13/14/15 恢复出厂设置吗? 出厂重置 iPhone 13/14/15 成为所有 iPhone 机型中最简单的。大多数情况下,iPhone 13/14/15 是在 iOS 15 或更高版本的 iOS 版本上,Apple 更新了无需密码重置 iPhone 13/…

IoT 物联网 MQTT 协议 5.0 版本新特性

MQTT 是一种基于发布/订阅模式的轻量级消息传输协议,专门为设备资源有限和低带宽、高延迟的不稳定网络环境的物联网场景应用而设计,可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于智能硬件、智慧城市、智慧农业、智慧医疗、新零…

GAMES101-Assignment5

一、问题总览 在这次作业中,要实现两个部分:光线的生成和光线与三角的相交。本次代码框架的工作流程为: 从main 函数开始。我们定义场景的参数,添加物体(球体或三角形)到场景中,并设置其材质&…

项目管理:风险的来源及管理方法

项目风险是项目管理中的难点之一,虽然我们无法将其完全消除,但可以提前做好准备,将风险降至最低。 项目风险如同暗礁潜伏,你和团队需时刻保持警惕。以下几种风险需特别关注: 措施不足:成本与行动的误差&…

加速科技ST2500 数模混合信号测试设备累计装机量突破500台!

国产数字机,测试中国芯!新年伊始,国产半导体测试设备领军企业加速科技迎来了振奋人心的一刻,ST2500 数模混合信号测试设备累计装机量突破500台!加速科技凭借其持续的创新能力、完善的解决方案能力、专业热忱的本地化服…

软件定义存储

软件定义存储源于VMware公司于2012年提出的软件定义的数据中心(SDDC)。存储作为软件定义的数据中心不可或缺的一部分,其以虚拟化为基础,但又不仅限于虚拟化。存储虚拟化一般只能在专门的硬件设备上应用,很多设备都是经…

笔记本摄像头模拟监控推送RTSP流

使用笔记本摄像头模拟监控推送RTSP流 一、基础安装软件准备 本文使用软件下载链接:下载地址 FFmpeg软件: Download ffmpeg 选择Windows builds by BtbN 一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。 EasyDarwin软件:Download Easy…

企业小文件多传输慢怎么办?怎么解决海量小文件传输慢的问题?

在当今信息时代,许多企业在文件传输过程中普遍面临一个棘手问题——小文件传输缓慢。这不仅对企业工作效率产生不良影响,还可能导致运营成本增加以及数据遗失与损坏的风险。那么,企业应该如何解决海量小文件传输缓慢的问题呢?本文…

高压MOS在适配器产品上的应用-REASUNOS瑞森半导体

一、适配器定义 电源适配器,英文Adapter通常指AC-DC(由交流输入转换为直流输出)的开关电源;一般由控制 IC、MOS管、整流肖特基管、电阻电容、磁性材料、DC 线、外壳等元器件及部件组成,通过整流、变压和稳压等转换形式…

第1章 引言

目录 1. 鸢尾花分类1.1 初识数据1.2 衡量模型是否成功:训练数据与测试数据1.3 要事第一:观察数据1.4 构建第一个模型:k近邻算法(KNeighborsClassifier)1.5 做出预测(predict)1.6 评估模型 1. 鸢…

【51单片机】延时函数delay的坑——关于无符号整型数据for语句“x >= 0“变成死循环

请认真看看以下延时函数是否正确,并且指出错误:(考考C语言功底) void delay_ms(unsigned int xms) //delay x ms {unsigned int x,y;for(xxms;x>0;x--)for(y124;y>0;y--); }废话少说,上正确代码: v…

linux ftp服务选择与ftp(vsftpd,Pure-FTPd)服务安装使用教程

一 linux ftp常用的服务软件 在Linux系统中,最常用的ftp有vsftpd,Pure-FTPd,ProFTPd,Wu-FTPd,glftpd,他们的特性优缺点如下对比图: 常用的5款linux ftp对比图: 软件特性优点缺点vsf…

unity C#中使用ref、out区别和使用案例

文章目录 ref 关键字out 关键字 在Unity(以及C#编程语言中), ref 和 out 都是用来传递参数的引用,这意味着它们允许函数修改实参变量,并且这些修改会反映到调用函数的地方。但它们之间确实存在一些关键区别和使用场景…

20、Kubernetes核心技术 - 基于Prometheus和Grafana搭建集群监控平台

目录 一、概述 二、监控平台架构图​编辑 三、部署 Prometheus 3.1、Prometheus简介 3.2、部署守护进程node-exporter 3.3、部署rbac 3.4、ConfigMap 3.5、Deployment 3.6、Service 3.7、验证Prometheus 四、部署Grafana 4.1、Deployment 4.2、Service 4.3、Ing…

Nginx实战 | 高性能HTTP和反向代理神器Nginx前世今生,以及它的“繁花之境”

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…