042-Form Kit服务卡片
042 — Form Kit 服务卡片从 2x2 到 4x4 的桌面数据展示实践简介服务卡片是鸿蒙系统的标志性能力之一它让用户无需打开应用就能在桌面上快速查看关键信息。MoneyTrack 利用 Form Kit 实现了两种尺寸的桌面卡片2x2 的迷你卡片MiniCard展示当日收支概览4x4 的中间卡片MiddleCard展示月度趋势图表。通过 FormExtensionAbility 生命周期管理、form_config.json 配置和定时刷新机制用户可以在桌面上实时掌握自己的财务状况。form_config.json 完整配置卡片的元信息在form_config.json中声明开发者在module.json5中通过formConfigPath字段引用该文件。以下为完整配置项说明配置项类型必填说明namestring是卡片名称在同一应用中唯一dimensionstring是卡片尺寸支持1x2、2x2、2x4、4x4descriptionstring否卡片描述用于系统界面展示updateEnabledboolean否是否启用定时刷新默认 falsescheduledUpdateTimestring否定时刷新时间格式HH:mm需配合 updateEnabledupdateDurationnumber否刷新间隔单位分钟最小 30 分钟formConfigAbilitystring否卡片配置页的 ability 名称landscapeLayoutstring否横屏布局文件的模块名isContainerboolean否是否为容器卡片默认 falsemultiUserEnabledboolean否是否支持多用户场景默认 false{forms:[{name:mini_card,dimension:2x2,description:当日收支概览,updateEnabled:true,scheduledUpdateTime:10:00,updateDuration:60,formConfigAbility:FormConfigAbility},{name:middle_card,dimension:4x4,description:月度收支趋势,updateEnabled:true,scheduledUpdateTime:08:00,landscapeLayout:MiddleCardLandscape}]}FormExtensionAbility 完整生命周期FormExtensionAbility 是卡片的后端逻辑载体管理卡片的完整生命周期。开发时需要继承该类并重写对应方法import{FormExtensionAbility,formBindingData}fromkit.FormKit;import{Want}fromkit.AbilityKit;exportdefaultclassMiniCardextendsFormExtensionAbility{// 用户将卡片添加到桌面时触发onAddForm(want:Want):formBindingData.FormBindingData{consttodayDatathis.getTodaySummary();returnformBindingData.createFormBindingData(todayData);}// 定时更新或系统触发更新时调用onUpdateForm(formId:string){constnewDatathis.getTodaySummary();this.updateForm(formId,formBindingData.createFormBindingData(newData));}// 用户从桌面移除卡片时触发用于清理资源onRemoveForm(formId:string){console.info(Form${formId}removed, cleaning up resources.);this.releaseDataConnection(formId);}// 用户点击卡片上的交互组件如按钮时触发onFormEvent(formId:string,message:string){if(messagerefresh){this.onUpdateForm(formId);}elseif(message.startsWith(navigate:)){constpagemessage.split(:)[1];this.navigateToPage(page);}}}四个生命周期方法的职责明确onAddForm负责初始化数据绑定onUpdateForm负责数据刷新onRemoveForm负责资源释放onFormEvent负责响应卡片上的用户交互事件。卡片数据刷新策略服务卡片的数据更新支持两种策略定时刷新通过updateEnabled和scheduledUpdateTime或updateDuration配置系统会在指定时间或间隔自动拉起 FormExtensionAbility 执行onUpdateForm。此方式实现简单但刷新频率受系统限制最小间隔 30 分钟且用户不可见时可能被系统延迟触发。主动推送应用在业务逻辑中通过formProvider.updateForm(formId, formBindingData)主动推送数据到已添加的卡片。此方式实时性高适合数据变化时需要立即更新的场景如记账后刷新卡片。使用前需先通过formProvider.getFormsInfo()查询当前已添加的卡片列表。import{formProvider,formBindingData}fromkit.FormKit;// 记账完成后主动刷新所有卡片asyncfunctionrefreshAllForms(){constformsawaitformProvider.getFormsInfo();for(constformofforms){constdataformBindingData.createFormBindingData({todayIncome:getTodayIncome(),todayExpense:getTodayExpense()});awaitformProvider.updateForm(form.formId,data);}}卡片生命周期流程卡片UIFormExtensionAbility桌面系统用户卡片UIFormExtensionAbility桌面系统用户定时刷新触发用户交互移除卡片长按桌面选择添加卡片创建 FormExtension 实例onAddForm(want) 初始化数据返回 FormBindingData渲染卡片 UI显示卡片内容onUpdateForm(formId)获取最新数据更新 FormBindingData刷新 UI 展示点击卡片按钮onFormEvent(formId, message)处理交互事件移除桌面卡片onRemoveForm(formId)清理资源卡片的运行限制服务卡片运行在受限环境中以保证系统性能和功耗资源限制卡片进程的内存上限较低约 20MB不应在卡片中执行大量数据计算或加载大图片。建议采用数据在应用中预处理卡片仅做展示的设计模式。API 限制卡片中无法使用全部 Ace 组件和 API。受限能力包括不支持网络请求需通过 FormExtensionAbility 代理、不支持本地存储读写需通过应用主进程提供数据、不支持弹窗和 Toast、不支持setInterval等高频率定时器、不支持Canvas完整绘图能力仅支持基础图形。生命周期限制卡片长时间不可见时系统可能回收卡片资源应用进程被杀死后卡片仍能显示最后更新的快照数据但交互事件无法响应。最佳实践按需选择刷新策略每日一次的数据如日账单概览用定时刷新用户操作后立即更新的场景用主动推送。控制卡片复杂度2x2 卡片聚焦 1-2 个核心数值4x4 卡片增加图表和分类避免过度拥挤。善用 onFormEvent通过 message 参数实现卡片轻交互如点击刷新图标更新数据、点击详情跳转应用内页面。兜底数据设计卡片应设计无数据时的默认占位 UI避免首次添加时显示空白。资源按需释放在 onRemoveForm 中及时取消网络监听、断开数据库连接避免内存泄漏。项目代码案例文件路径entry/src/main/ets/FormAbility/MiniCard.ets2x2 卡片import{FormExtensionAbility,formBindingData,formProvider}fromkit.FormKit;import{Want}fromkit.AbilityKit;exportdefaultclassMiniCardextendsFormExtensionAbility{onAddForm(want:Want){consttodayDatathis.getTodaySummary();returnformBindingData.createFormBindingData(todayData);}onUpdateForm(formId:string){constnewDatathis.getTodaySummary();this.updateForm(formId,formBindingData.createFormBindingData(newData));}onRemoveForm(formId:string){console.info(MiniCard${formId}removed.);}onFormEvent(formId:string,message:string){if(messageaction_refresh){this.onUpdateForm(formId);}}privategetTodaySummary(){return{todayIncome:¥1,200,todayExpense:¥356};}}推荐参考文档Form Kit 服务卡片指南form_config.json 配置参考卡片开发最佳实践

相关新闻

Android构建变体:Gradle多版本管理实战指南

Android构建变体:Gradle多版本管理实战指南

1. 构建变体的本质与价值在Android应用开发中,构建变体(Build Variant)是Gradle构建系统的核心概念之一。简单来说,构建变体就是通过不同维度的组合,生成具有差异化特性的应用版本。这就像一家汽车工厂,用相…

2026/7/26 22:45:34 阅读更多 →
Android Handler延迟消息机制详解与优化实践

Android Handler延迟消息机制详解与优化实践

1. Handler消息延迟机制的核心原理 在Android开发中,Handler的消息延迟操作是一个基础但极其重要的功能点。我见过太多新手开发者直接在主线程中使用Thread.sleep()来实现延迟,结果导致ANR(Application Not Responding)错误。实际…

2026/7/26 22:45:40 阅读更多 →
Unity集成OpenPose:实时人体姿态估计插件开发与优化指南

Unity集成OpenPose:实时人体姿态估计插件开发与优化指南

1. 项目概述:为什么要在Unity里集成OpenPose?如果你正在开发一款需要理解人体动作的应用,比如虚拟试衣、体感游戏、运动分析或者交互式艺术装置,那么“人体姿态估计”这个技术你一定不陌生。简单来说,它就是让计算机从…

2026/7/29 6:14:22 阅读更多 →

最新新闻

Jetson Nano从零配置指南:系统烧录、环境部署与性能优化全流程

Jetson Nano从零配置指南:系统烧录、环境部署与性能优化全流程

1. 项目概述:为什么需要一份“从零开始”的配置指南? 如果你手头有一块Jetson Nano,无论是刚从二手市场淘来的,还是因为之前的系统被自己“玩坏了”需要重装,面对一块近乎“裸机”的开发板,第一步往往是最让…

2026/7/30 4:02:35 阅读更多 →
数字电路设计实践:基于状态机的交通灯控制系统实现

数字电路设计实践:基于状态机的交通灯控制系统实现

1. 项目概述:从理论到实践的交通灯控制逻辑搞数电设计,交通灯控制系统绝对是个绕不开的经典项目。它不像一些纯理论的电路那样抽象,而是把一个我们每天都能见到的、实实在在的系统,用数字逻辑电路给实现出来。这项目有意思的地方在…

2026/7/30 4:02:35 阅读更多 →
STM32 GPIO开发实战:从原理到避坑,掌握八种工作模式与HAL库配置

STM32 GPIO开发实战:从原理到避坑,掌握八种工作模式与HAL库配置

1. 从零开始:为什么GPIO是STM32开发的“第一课”如果你刚开始接触STM32,或者从Arduino这类更简单的平台转过来,可能会觉得有点无从下手。芯片手册动辄上千页,各种外设、时钟、寄存器看得人眼花缭乱。我的建议是,别管那…

2026/7/30 4:02:35 阅读更多 →
数据仓库性能优化全景图:存储、计算、查询三层的协同调优

数据仓库性能优化全景图:存储、计算、查询三层的协同调优

数据仓库性能优化全景图:存储、计算、查询三层的协同调优 Hey,我是朱大喜。做数仓的兄弟姐妹们,应该都经历过这种痛:一张跑 40 分钟的 SQL 被业务方堵门催,DBA 说加资源,老板说控成本,你夹在中间…

2026/7/30 4:02:35 阅读更多 →
AI 数据分析的全栈能力图谱:工具、思维和方法论的三维统一

AI 数据分析的全栈能力图谱:工具、思维和方法论的三维统一

AI 数据分析的全栈能力图谱:工具、思维和方法论的三维统一 朱大喜的周总结收官之作!这周把 AI 数据分析的各种话题都捋了一遍,今天画张全景地图。作为一个在这个领域折腾了三年的分析师,我越来越觉得:AI 数据分析需要的…

2026/7/30 4:02:35 阅读更多 →
AI辅助学术写作:工具、实践与效率提升

AI辅助学术写作:工具、实践与效率提升

1. AI辅助学术写作的时代机遇去年协助一位语言学教授完成专著时,我们团队首次系统性地采用了AI写作工具。原本需要三个月完成的文献综述章节,最终仅用两周就达到了出版社的审稿标准。这个案例让我深刻意识到,学术写作正在经历从"笔耕不辍…

2026/7/30 4:01:35 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻