首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

鸿蒙HarmonyOS实战-Stage模型(ExtensionAbility组件)

  • 25-02-22 03:40
  • 4179
  • 5104
blog.csdn.net

 一、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';
名称类型可读可写说明
contextFormExtensionContext是否FormExtensionAbility的上下文环境,继承自ExtensionContext。

?2.2 onAddForm

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

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

  1. import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
  2. import formBindingData from'@ohos.app.form.formBindingData';
  3. export default class MyFormExtensionAbility extends FormExtensionAbility {
  4. onAddForm(want) {
  5. console.log('FormExtensionAbility onAddForm, want:' + want.abilityName);
  6. let dataObj1 = {
  7. temperature:'11c',
  8. 'time':'11:00'
  9. };
  10. let obj1 = formBindingData.createFormBindingData(dataObj1);
  11. return obj1;
  12. }
  13. }

在这里插入图片描述

?2.3 onCastToNormalForm

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

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

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

在这里插入图片描述

?2.4 onUpdateForm

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

onUpdateForm方法具有以下特点:

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

在这里插入图片描述

?2.5 onChangeFormVisibility

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

该方法的原型是:

public void onChangeFormVisibility(boolean isVisible)

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

  1. import FormExtensionAbility from '@ohos.app.form.FormExtensionAbility';
  2. import formBindingData from '@ohos.app.form.formBindingData';
  3. import formProvider from '@ohos.app.form.formProvider';
  4. export default class MyFormExtensionAbility extends FormExtensionAbility {
  5. onChangeFormVisibility(newStatus) {
  6. console.log('FormExtensionAbility onChangeFormVisibility, newStatus: ${newStatus}');
  7. let obj2 = formBindingData.createFormBindingData({
  8. temperature: '22c',
  9. time: '22:00'
  10. });
  11. for (let key in newStatus) {
  12. console.log('FormExtensionAbility onChangeFormVisibility, key: ${key}, value= ${newStatus[key]}');
  13. formProvider.updateForm(key, obj2).then((data) => {
  14. console.log('FormExtensionAbility context updateForm, data: ${data}');
  15. }).catch((error) => {
  16. console.error('Operation updateForm failed. Cause: ${error}');
  17. });
  18. }
  19. }
  20. };

在这里插入图片描述

?2.6 onFormEvent

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

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

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

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

在这里插入图片描述

?2.7 onRemoveForm

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

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

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

在这里插入图片描述

?2.8 onConfigurationUpdate

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

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

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

在这里插入图片描述

?2.9 onAcquireFormState

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

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

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

在这里插入图片描述

3.WorkSchedulerExtensionAbility

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

?3.1 导入模块

import WorkSchedulerExtensionAbility from '@ohos.WorkSchedulerExtensionAbility'

?3.2 onWorkStart

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

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

在这里插入图片描述

?3.3 onWorkStop

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

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

在这里插入图片描述

 ?写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing?,不定期分享原创知识。
  • 想要获取更多完整鸿蒙最新VIP学习资料,请点击→全套鸿蒙HarmonyOS学习资料
  • 或者关注小编后私信回复【666】也可获取资料哦~~

最新鸿蒙Next全套学习资料请扫码
微信名片
注:本文转载自blog.csdn.net的蜀道山QAQ的文章"https://blog.csdn.net/shudaoshanQAQ/article/details/135479734"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top