#jitoa#【OpenHarmony 北向应用开发】Arkts服务卡片数据每秒刷新的实现? 原创

X叶域Q
发布于 2023-12-21 18:49
浏览
1收藏

此博客由金陵科技学院-开放原子开源社 李俊杰编写

简介:

参考以下官方文档

  1. 通过UIAbility刷新卡片内容 (openharmony.cn)
  2. 通过FormExtensionAbility刷新卡片内容 (openharmony.cn)
  3. 定时刷新和定点刷新 (openharmony.cn)

其中,通过router或call事件刷新卡片内容, 通过message事件刷新卡片内容,都是用户执行某个操作触发相应的回调,定时刷新和定点刷新通过配置了updateDuration(定时刷新) 或调用setFormNextRefreshTime()接口来实现,但最短刷新时间都以分钟为单位,那么如何实现像计步器卡片(JS) (huawei.com),这种类型的每隔几秒刷新呢?

实现原理:

通过设置定时函数每秒调用formProvider的updateForm方法实现卡片更新

实现难点:

难点一: Arkts卡片如何接收要刷新的数据

通过 LocalStorage:页面级UI状态存储 (openharmony.cn)

let storage = new LocalStorage();
@Entry(storage)
@Component
struct WidgetCard {
  @LocalStorageProp("message") message: string = "hello world";
  ...
}

难点二: updateForm只能更新指定卡片,如何获取卡片的唯一标识

在卡片FormExtensionAbility生命周期接口,创建卡片时可以通过want参数获取卡片的唯一表示formId,为了在其他地方调用或者卡片不止一个为方便管理建议使用关系型数据库存储 保存应用数据 _关系型数据库的使用

// 使用方创建卡片时触发,提供方需要返回卡片数据绑定类
onAddForm(want) {
    // 在入参want中可以取出卡片的唯一标识:formId
    let formId: string = want.parameters[formInfo.FormParam.IDENTITY_KEY];
    // 在这里存储formId
    	...
    let obj = {"message": "hello world"};
    let formData = formBindingData.createFormBindingData(obj);
    return formData;
  }

难点三: 定时函数写在哪里

可以写在主页面的生命周期回调函数aboutToAppear 中,然后再aboutToDisappear 中进行销毁

@State message: string = "hello";
  private intervalId: number = 0;
  aboutToAppear(){
    // 设置定时函数,执行间隔为1000ms
    this.intervalId = setInterval(()=>{
        // 从数据库中拿到存储的formId
        let formId: string = ...
        // 要更新给卡片的数据
        let obj = {"message": this.message};
        let formInfo = formBindingData.createFormBindingData(obj)
        formProvider.updateForm(formId, formInfo);
    }, 1000)
  }
  aboutToDisappear(){
    clearInterval(this.intervalId)
  }

参考资料:

1. 卡片生命周期管理

卡片生命周期管理 (openharmony.cn)

2. LocalStorage:页面级UI状态存储

LocalStorage:页面级UI状态存储 (openharmony.cn)

3. 关系型数据库

第五章-保存应用数据 _关系型数据库的使用_哔哩哔哩_bilibili

4. 卡片数据绑定类和FormProvider模块

@ohos.app.form.formBindingData (卡片数据绑定类) (openharmony.cn)

@ohos.app.form.formProvider (FormProvider) (openharmony.cn)

import formBindingData from '@ohos.app.form.formBindingData';
import formProvider from '@ohos.app.form.formProvider';

5. 页面和自定义组件生命周期

页面和自定义组件生命周期 (openharmony.cn)

6. 实战项目

计步器卡片(JS) (huawei.com)

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2024-1-5 17:07:20修改
2
收藏 1
回复
举报
1条回复
按时间正序
/
按时间倒序
安苒anran0
安苒anran0

配图有点少

1
回复
2023-12-30 20:31:00
回复
    相关推荐