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

harmony next 服务卡片实时刷新

此前今日事鸿蒙版卡片数据刷新还是有点问题。

问题:

安装应用后把卡片放到桌面,在app内新增一条数据,服务卡片不刷新,需要把app进程删除重新打开,才能正常刷新数据。

原因:

卡片渲染在系统进程,创建和调用都是系统触发,即EntryFormAbility里的代码其实运行在系统进程里面,跟app进程有内存隔离。没法做到数据实时共享。

懒得上图了,卡片交互流程直接上官网看吧。

这里主要解决问题。

需要通过harmony提供的跨进程通信模块

import commonEventManager from '@ohos.commonEventManager'

来把卡片id发给app内进行保存,才能保证在app内能实时拿到卡片id,才能保证数据能刷新到卡片上。

核心代码:

import commonEventManager from '@ohos.commonEventManager'class SubscriberClass {event_form_id = "form_id"publishCount: number = 1subscriber?: commonEventManager.CommonEventSubscriber// 发布者publish(eventType: string ,data:string){// next中data支持导入类型commonEventManager.publish(eventType,{data},(err)=>{if(err){// 失败只发3次if(this.publishCount<=3){this.publishCount++this.publish(eventType,data)}else{this.publishCount = 1}}else{this.publishCount = 1}})}// 订阅者subscribe(eventType: string, callback:(event?: string)=>void){commonEventManager.createSubscriber({ events: [eventType] }, (err, sub) => {if (err) {return console.log('logData:', `创建订阅者error ${JSON.stringify(err)}`)}this.subscriber = subif (this.subscriber !== null) {//订阅事件commonEventManager.subscribe(this.subscriber, (err, data) => {if (err) {return console.error(`logData`, '订阅事件失败')}callback(data.data)})} else {console.error('logData:',`需要创建subscriber`);}})}
}export default new SubscriberClass()

这里简单构造了一个跨进程通信的发布与订阅的对象,在卡片EntryFormAbility调用publish,把formId发布出来。在App的EntryAbility中subscribe数据。

在EntryFormAbility的onAddForm中:

SubscriberClass.publish(SubscriberClass.event_form_id, formId)

在EntryAbility的onWindowStateCreate中:

SubscriberClass.subscribe(SubscriberClass.event_form_id, (data?: string) => {if (data) {CardManager.get().saveCardId(this.context, data)}})

这样,才能确保在APP中任意位置能更新到卡片:

CardManager.get().updateCard()

多说无益,直接看源码吧:


http://www.mrgr.cn/news/8256.html

相关文章:

  • docker镜像,ip,端口映射,持久化
  • 【MySQL数据库管理问答题】第2章 安装和升级MySQL
  • C++进阶 | [5] 哈希
  • 2024华为数通HCIP-datacom最新题库(H12-831变题更新⑩)
  • 自动续期 双token流程
  • 大数据-99 Spark 集群 Spark Streaming DStream 文件数据流、Socket、RDD队列流
  • 基于php网上差旅费报销系统设计与实现
  • OSPF路由原理详解与关键点
  • spring揭秘09-aop02-aop基本要素抽象与通知及切面织入
  • RCE - - 无字母数字远程命令执行
  • 【机器学习】3. 欧式距离,曼哈顿距离,Minkowski距离,加权欧式距离
  • Spring声明式事务
  • Json-TypeFactory和TypeReference和JavaType
  • Mac apache 配置
  • 大型物流运输无人机技术详解
  • 前端理论总结(js)——原型链 // 原型 // 浅拷贝和深拷贝
  • Vue3 组件 10
  • 数字化技术分别有哪些,数字化技术特点和优势是什么?
  • [NeurIPS 2024] Self-Refine: Iterative Refinement with Self-Feedback
  • HTML 标签大合集:一文入门