HarmonyOS鸿蒙Next中服务卡片设置定时刷新,但应用在前台时,定时刷新不起作用
HarmonyOS鸿蒙Next中服务卡片设置定时刷新,但应用在前台时,定时刷新不起作用 详细:
前提:自己写定时器定时20s刷新一次,在桌面(或log)观察卡片,会看到卡片更新了(log中也可以看到更新相关的日志)。
问题: 若应用打开着(在前台),20s时间到了,会看到卡片更新的log,但回到桌面(任意方式)后,发现卡片并没有更新。
在桌面继续等待更新时机,卡片是能够正常更新的(和 前提 描述一致)。
请问有遇到这种情况么? 我写了个demo也是这种情况~
多次验证,发现卡片在后台的前提下,updateForm时,使用provider进行的UI操作超过一定次数,就会出现所说的问题。(卡片在后台,更新成功了,返回前台(桌面)时,发现更新渲染失败了)。
根本原因和卡片的更新缓存有关。
解决方案,在onUpdateForm的回调中,主动使用最新数据更新卡片。
方案说明:发生问题的场景,按Home键会回调到onUpdateForm方法。
Tips: onUpdateForm 回调时机还包括 横竖屏切换。
更多关于HarmonyOS鸿蒙Next中服务卡片设置定时刷新,但应用在前台时,定时刷新不起作用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
开发者你好,我测试了JAVA时钟卡片的Demo的定时器为10s,处于应用界面时卡片文字是可以刷新的。请提供下定时刷新的代码,谢谢
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17
多谢尝试,Demo直接使用确实没毛病~
和UI操作次数有点关系(多setText
或者setVisible
,次数超过某限定值;也不一定是次数了,最终和缓存有关),已完美复现。
解决方案已回帖。
我写过每隔2秒刷新卡片数据的,其实就是在Service里面开启定时任务,每隔2秒调用 updateForm(updateFormId, componentProvider)
这个方法,就可以更细卡片。
多谢尝试,Demo直接使用确实没毛病~
解决方案已回帖。
Service 里面 使用 Timer, Service是在卡片创建的时候开启的
你是在卡片上刷新图片么,目前是 卡片肉眼不可见时无法刷新图片,但文字是可以刷新的我的卡片帖子里描述了这个问题
不涉及图片的更新,我在 基础上更改了下, 定时器改为20s刷新一次时间(显示最新时间)。
我的重点是:
正常举例->
定时器在创建卡片时候打开着,停留在桌面,可以看到时间在刷新(20s刷新一次).
异常举例->
我12:00:00时,打开卡片应用,此时卡片应用于处于前台,定时器开启工作,20s后刷新卡片显示最新时间,我等待30s,回到桌面,发现卡片显示的还是12:00:00。 log可以看到定时器 run执行了刷新,且updateForm返回true。
也就是 卡片不可见的时候,我刷新卡片的文字信息,发现刷新不了。但实际调用了updateForm且成功了。
我修改了JAVA时钟卡片的Demo的定时器为10s,处于应用界面时卡片文字是可以刷新的.
这就很尴尬了,我重新打开一个新的卡片时钟的项目,确实是OK的。
我自己先慢慢定位下啥原因导致的。
多谢了。
据说 定时刷新 时间最短为30分钟一次。。。。。。。。。。。。。。所以 你是不是有什么误解。
我说的是自己写定时器进行刷新; 你说的是config里面设置的那个~
一样的 卡片的定时刷新 只能是config里 30分钟一次。 自己写?循环? 不行的。 就两种刷新 一种是点击卡片 主动刷新,一种是config 最短30分钟定时刷新。
为啥说只能主动点击 更新呢,主动点击更新不就是调用updateForm,自己写个Timer&TimerTask,时间到了拿最新数据去主动updateForm,不香么?
不纠结这个问题了,可以 搜 #HarmonyOS征文# 有很多文章。
欢迎开发小伙伴们进来帮帮楼主
在HarmonyOS鸿蒙Next中,服务卡片的定时刷新机制默认在应用处于后台时生效,以确保资源的高效利用。当应用处于前台时,系统会认为用户正在主动与应用交互,因此不会触发定时刷新。如果您需要在前台时更新卡片内容,可以通过监听应用生命周期事件,手动调用updateForm
方法来更新卡片数据,确保用户体验的连贯性。