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

卡片刷新三板斧:定时、定点、主动请求——搞清楚才不会乱

文章目录先搞明白谁在控制刷新方式一定时刷新updateDuration方式二定点刷新scheduledUpdateTime方式三主动请求刷新formHost.requestForm三种方式对比卡片 UI 接收数据整体数据流图常见问题写在最后写卡片刷新功能踩了不少坑最大的问题是刷新方式有三种文档描述很相似一不小心配错了卡片数据死活不更新死活不知道原因。今天把这三种方式彻底讲清楚。先搞明白谁在控制刷新刷新卡片数据的流程是这样的触发刷新可能是定时器、定点时间、宿主应用按钮系统回调FormExtensionAbility.onUpdateForm(formId)你在里面构造新数据调formProvider.updateForm(formId, newData)推送卡片 UI 收到LocalStorage更新自动重渲染三种刷新方式的区别只在第 1 步——触发方式不同后面都一样。方式一定时刷新updateDuration最简单设置一个刷新间隔系统自动按时来敲门。在form_config.json里配置{forms:[{name:widget,updateEnabled:true,// 必须是 true否则全部刷新功能都不生效updateDuration:1,// 单位30分钟填 1 每30分钟刷一次scheduledUpdateTime:// 定时刷新时此字段留空或不填}]}注意updateDuration的单位比较坑不是分钟也不是秒是30分钟的倍数updateDuration 值实际刷新间隔130 分钟260 分钟1小时4824 小时系统最短刷新间隔是 30 分钟不能更短了这是平台限制。FormAbility 里处理刷新// entry/src/main/ets/entryformability/EntryFormAbility.etsimport{formBindingData,FormExtensionAbility,formProvider}fromkit.FormKit;import{Want}fromkit.AbilityKit;import{BusinessError}fromkit.BasicServicesKit;exportdefaultclassEntryFormAbilityextendsFormExtensionAbility{onAddForm(want:Want):formBindingData.FormBindingData{// 卡片创建时返回初始数据constformData:Recordstring,string{};returnformBindingData.createFormBindingData(formData);}onUpdateForm(formId:string):void{// 系统按照 updateDuration 的间隔自动调用这个方法// 在这里准备新数据然后推送给卡片classFormDataClass{title:stringTitle Update.;// 对应卡片 UI 里的 title 绑定detail:stringDescription update success.;// 对应卡片 UI 里的 detail 绑定}constformDatanewFormDataClass();constformInfoformBindingData.createFormBindingData(formData);// 关键用 formProvider.updateForm 推送数据formProvider.updateForm(formId,formInfo).then((){console.info(定时刷新成功);}).catch((error:BusinessError){console.error(定时刷新失败:${JSON.stringify(error)});});}}方式二定点刷新scheduledUpdateTime在每天固定的时间点刷一次比如每天上午 10:30 更新。修改form_config.json{forms:[{name:widget,updateEnabled:true,updateDuration:0,// 定点刷新时updateDuration 要设为 0scheduledUpdateTime:10:30// 每天 10:30 刷新24小时制}]}注意updateDuration和scheduledUpdateTime是互斥的。想用定点刷新updateDuration必须设为0。onUpdateForm的代码和定时刷新完全一样只是触发的时间点不同。方式三主动请求刷新formHost.requestForm前两种是系统主动来找你这种是宿主应用卡片使用方主动要求刷新。典型场景用户在应用里点了刷新按钮你希望卡片立马更新数据。宿主应用FormUpdateDemo的 Index 页面// entry/src/main/ets/pages/Index.etsimport{formHost}fromkit.FormKit;import{BusinessError}fromkit.BasicServicesKit;import{hilog}fromkit.PerformanceAnalysisKit;constDOMAIN_NUMBER:number0xFF00;letstoragenewLocalStorage();Entry(storage)Componentstruct Index{StateformId:string0;// 这个 ID 要从 FormComponent 的 onAcquired 回调里取build(){Column(){// FormComponent 展示卡片同时获取 formIdFormComponent({id:0,name:widget,bundle:com.samples.formupdatedemo,ability:EntryFormAbility,module:entry,dimension:2,temporary:false,}).size({width:200,height:200}).borderColor(Color.Black).borderRadius(10).borderWidth(1)// 卡片成功加载后拿到 formId.onAcquired((form:FormCallbackInfo){hilog.info(DOMAIN_NUMBER,testTag,onAcquired:${JSON.stringify(form)});this.formIdform.id.toString();// 保存 formId后续刷新用}).onRouter((){hilog.info(DOMAIN_NUMBER,testTag,onRouter);}).onError((error){hilog.error(DOMAIN_NUMBER,testTag,onError:${JSON.stringify(error)});})Text(当前 formId:${this.formId}).fontSize(14).margin(10)// 点击按钮主动请求刷新Button(刷新卡片).onClick((){if(this.formId!0){// formHost.requestForm 触发 onUpdateForm 回调formHost.requestForm(this.formId).then((){hilog.info(DOMAIN_NUMBER,testTag,主动请求刷新成功);}).catch((error:BusinessError){hilog.error(DOMAIN_NUMBER,testTag,刷新失败:${error?.code}${error?.message});});}}).margin(5).width(50%)}.width(100%).height(100%)}}流程重点先从FormComponent.onAcquired拿到formId再用formHost.requestForm(formId)触发刷新。如果没拿到formId就调用直接报错。三种方式对比方式触发者配置位置最小间隔适用场景定时刷新系统form_config.jsonupdateDuration30分钟定期更新天气、新闻等定点刷新系统form_config.jsonscheduledUpdateTime每天一次每日早报、定时提醒主动请求宿主应用代码调用无限制用户手动触发、实时数据卡片 UI 接收数据三种方式在FormAbility里最终都调用formProvider.updateForm卡片 UI 通过LocalStorageProp接收更新后的数据// entry/src/main/ets/widget/pages/WidgetCard.etsletstorage:LocalStoragenewLocalStorage();Entry(storage)Componentstruct WidgetCard{// 这两个字段名要和 FormAbility 里 FormDataClass 的字段名完全一致LocalStorageProp(title)title:string加载中...;LocalStorageProp(detail)detail:string;build(){Column(){Text(this.title).fontSize(16).fontColor(#FFFFFF).margin({top:8%,left:10%})Text(this.detail).fontSize(12).fontColor(#FFFFFF).opacity(0.6).margin({top:5%,left:10%})}.width(100%).height(100%)}}整体数据流图常见问题QupdateEnabled设成false了但是requestForm还能用吗不能用。updateEnabled是总开关关掉之后所有刷新方式包括主动请求都会被拦截onUpdateForm不会被调用。Q定时刷新和定点刷新能同时配吗不能。两个配置互斥同时填了系统只会用其中一种通常是scheduledUpdateTime优先。Q卡片在后台不可见时还会刷新吗不会系统为了省电不可见的卡片不会触发onUpdateForm。等卡片重新可见时会触发一次刷新。写在最后这三种方式各有用途别混用。想让卡片自动更新天气、股价用定时刷新想让卡片每天固定时间更新日报用定点刷新想让用户点按钮立刻刷新就用formHost.requestForm。选对了方式卡片就省电又好用。

相关文章:

卡片刷新三板斧:定时、定点、主动请求——搞清楚才不会乱

文章目录先搞明白谁在控制刷新方式一:定时刷新(updateDuration)方式二:定点刷新(scheduledUpdateTime)方式三:主动请求刷新(formHost.requestForm)三种方式对比卡片 UI 接…...

ElevenLabs导航语音部署失败的11个致命原因,92%开发者踩过第5个——现在修复还来得及!

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs导航语音部署失败的全局认知与根本定位 当 ElevenLabs 的语音合成 API 集成至车载或移动导航系统时,常见“静默无响应”“HTTP 429 频繁限流”或“TTS 流中断”等表象故障&#x…...

Python技能安装器设计:从虚拟环境到CLI的自动化部署实践

1. 项目概述:一个技能安装器的诞生在开源社区里,我们经常遇到一些“小而美”的工具或脚本,它们能解决特定场景下的痛点,但往往缺乏一个统一的、便捷的安装和管理入口。用户需要手动克隆仓库、检查依赖、配置环境变量,甚…...

Claude Code Ultraplan 远程多代理规划全解析:AI Agent、CCR远程容器、异步规划、状态机、计划传送与企业级自动化治理

一、先说结论:Ultraplan 到底解决了什么痛点?Ultraplan 可以理解为一种“远程规划模式”:用户在本地终端发起一个复杂任务,系统把规划阶段卸载到远程 CCR 容器中执行。本地终端不再被长时间占住,远程端可以使用更强模型…...

5步轻松上手:Grasscutter命令生成器实用指南

5步轻松上手:Grasscutter命令生成器实用指南 【免费下载链接】GrasscutterCommandGenerator Command Generator and Gacha Banner Editor 项目地址: https://gitcode.com/gh_mirrors/gr/GrasscutterCommandGenerator 还在为复杂的原神私服命令而烦恼吗&#…...

5步构建智能建筑通信系统:BACnet4J纯Java协议栈的架构师指南

5步构建智能建筑通信系统:BACnet4J纯Java协议栈的架构师指南 【免费下载链接】BACnet4J BACnet/IP stack written in Java. Forked from http://sourceforge.net/projects/bacnet4j/ 项目地址: https://gitcode.com/gh_mirrors/ba/BACnet4J 在智能建筑和工业…...

RAG实战指南:让大模型学会检索外部知识

RAG:给 LLM 装上知识库——从原理到完整可运行系统LLM 的知识截止在训练日期。RAG 让 AI 能「查资料」回答——这是 Agent 有「长期记忆」的基础。一、为什么需要 RAG 用户:HarmonyOS NEXT 的 Observed 装饰器怎么用?没有 RAG 的 LLM&#xf…...

GenAI云服务事故特征与高效缓解策略解析

1. GenAI云服务事故特征与挑战 在云服务运维领域,GenAI服务因其独特的架构特性呈现出明显区别于传统云服务的事故特征。根据微软云系统的大规模实证研究数据,GenAI事故的平均缓解时间(TTM)达到1.12个时间单位,比非GenA…...

终极指南:如何在Windows电脑上免费预览iPhone的HEIC照片

终极指南:如何在Windows电脑上免费预览iPhone的HEIC照片 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是否经常遇…...

Cursor AI插件深度解析:从自动化脚本到智能编程工作流

1. 项目概述:一个为 Cursor 编辑器注入灵魂的 AI 增强插件如果你和我一样,日常开发重度依赖 Cursor 这款“AI 原生”编辑器,那你一定体验过它内置的 AI 对话和代码生成带来的效率提升。但用久了,你可能会发现一些痒点:…...

ElevenLabs动画配音语音交付危机预警,紧急修复唇动不同步、语速断层、多语言混读错位的6大实时响应方案

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs动画配音语音交付危机的本质溯源 当动画制作团队依赖 ElevenLabs API 实时生成角色语音时,突然出现的 429 Too Many Requests 响应、TTS 音频静音片段、以及语音情感断层现象&…...

微信好友检测终极指南:快速发现谁删除了你的免费解决方案

微信好友检测终极指南:快速发现谁删除了你的免费解决方案 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends …...

别再替换同义词!2026实测论文降AIGC工具:一次降至10%以下的排版保护指南

自从央视公开探讨初稿写作的AI味儿现象:据相关数据显示,近六成师生习惯使用生成式辅助,其中近三成学生将其用于核心初稿的撰写,各高校针对AIGC的审查便日益严格。 正是因为这种大背景,四月一到,定稿通知刚…...

终极指南:如何让Figma说中文,快速提升设计效率

终极指南:如何让Figma说中文,快速提升设计效率 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN FigmaCN是一款专为中文用户设计的Figma中文界面插件,通…...

苹果砂不锈钢蜂窝板做出来真的和苹果店一样吗?来自广东优之彩!

当“苹果店质感”成为高级商业空间的隐形标尺,无数人追问:我们能用苹果砂不锈钢蜂窝板,复刻那种极致、均匀、充满科技感的哑光金属美学吗?答案是:可以。但前提是,你选择的不仅是材料,更是一套完…...

应对2026知网维普算法更新:论文降AI全攻略,实测3款主流工具与手动微调方法

自从央视公开探讨初稿写作的AI味儿现象:据相关数据显示,近六成师生习惯使用生成式辅助,其中近三成学生将其用于核心初稿的撰写,各高校针对AIGC的审查便日益严格。 正是因为这种大背景,四月一到,定稿通知刚…...

Windows终极优化神器:WinUtil - 一键解决系统安装、优化、修复的完整指南

Windows终极优化神器:WinUtil - 一键解决系统安装、优化、修复的完整指南 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否厌…...

终极解决方案:3分钟免费恢复微信网页版完整访问权限

终极解决方案:3分钟免费恢复微信网页版完整访问权限 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为微信网页版无法登录而烦恼吗&am…...

Arm DynamIQ DSU L3缓存电源管理技术解析

1. Arm DynamIQ DSU L3缓存电源管理技术全景解析在现代处理器架构设计中,缓存子系统往往占据芯片总功耗的30%-40%,其中L3共享末级缓存因其大容量特性成为功耗优化的重点对象。Arm DynamIQ™架构创新的DSU(DynamIQ Shared Unit)通过…...

3分钟彻底告别Windows资源管理器窗口混乱:QTTabBar终极标签页解决方案

3分钟彻底告别Windows资源管理器窗口混乱:QTTabBar终极标签页解决方案 【免费下载链接】qttabbar QTTabBar is a small tool that allows you to use tab multi label function in Windows Explorer. https://www.yuque.com/indiff/qttabbar 项目地址: https://gi…...

书匠策AI官网www.shujiangce.com|别再死磕“洗稿式降重“了!这才是2025论文通关的正确姿势

🫠 你有没有经历过这种"窒息时刻"? 凌晨两点,你对着查重报告,满屏飘红像开了大灯的KTV。你一句一句地改,把"因此"换成"所以",把"研究表明"换成"分析发现&qu…...

【Claude Redis缓存方案实战白皮书】:20年架构师亲授高并发场景下99.99%命中率的5层缓存协同设计

更多请点击: https://intelliparadigm.com 第一章:Claude Redis缓存方案的演进逻辑与设计哲学 Claude 系统在高并发对话场景下对低延迟、强一致性的缓存层提出严苛要求。其 Redis 缓存方案并非简单封装客户端,而是围绕“语义感知缓存生命周期…...

Markdown到思维导图的架构化转换:基于AST解析与D3渲染的技术实现

Markdown到思维导图的架构化转换:基于AST解析与D3渲染的技术实现 【免费下载链接】markmap Build mindmaps with plain text 项目地址: https://gitcode.com/gh_mirrors/ma/markmap Markdown思维导图转换技术通过结构化文本解析与可视化渲染引擎的协同工作&a…...

TI SimpleLink CC26xx/CC13xx超低功耗无线平台架构解析与实战

1. 项目概述:为什么我们需要一个“超低功耗”的无线平台?如果你正在设计一个需要靠电池运行数年甚至十年的物联网设备,比如智能门锁、环境传感器或者可穿戴健康监测器,那么“功耗”这个词绝对是你每天都要面对的噩梦。传统的无线方…...

BilibiliDown:如何轻松实现B站视频批量下载与音频提取的终极指南

BilibiliDown:如何轻松实现B站视频批量下载与音频提取的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh…...

Python 簡單的 股市資料 API 呼叫範例

前言 假如我們想從某個外部服務取得股市資料,藉由Python API 呼叫,可以讓我們從雅虎財經的API下載市場數據。以下簡單得介紹一個API , yfinance 一個 Python 開源函式庫,使用者可以輕鬆地取得股票、指數、貨幣、ETF、基金以及期貨…...

别再只会用os.listdir了!Python遍历文件夹的3种高效方法(附性能对比)

别再只会用os.listdir了!Python遍历文件夹的3种高效方法(附性能对比) 当你的Python项目需要处理成千上万的文件时,传统的os.listdir()方法可能会成为性能瓶颈。我曾经在一个图像处理项目中,因为使用了不当的遍历方法&a…...

从脚本到爆款:ElevenLabs广告配音全流程SOP(含品牌人设音色锚定表+情绪曲线映射表)

更多请点击: https://intelliparadigm.com 第一章:从脚本到爆款:ElevenLabs广告配音全流程SOP(含品牌人设音色锚定表情绪曲线映射表) ElevenLabs 已成为全球增长最快的 AI 语音平台之一,其高保真、低延迟、…...

Arduino激光绊线制作:从光电传感器到智能触发系统

1. 项目概述:从创意到实现的激光绊线几年前,我在一个创客工作坊里,看到有人用一个简单的激光笔和光敏电阻,就做出了一个能触发警报的“隐形防线”。当时就觉得这玩意儿太酷了,原理简单,但应用场景多得数不过…...

SillyTavern角色卡片系统:打造属于你的AI灵魂伴侣

SillyTavern角色卡片系统:打造属于你的AI灵魂伴侣 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 你是否曾经幻想过,能有一个真正理解你、陪伴你的AI伙伴&#xff1…...