鸿蒙三方库 | harmony-utils之PreferencesUtil首选项数据监听详解

前言

首选项数据监听可以让应用实时感知配置变化,如主题切换、语言变更等。@pura/harmony-utilsPreferencesUtil 封装了数据变化监听方法。本文将从API说明、代码实战、进阶用法、常见问题等多个维度进行全面讲解,帮助开发者快速掌握并应用到实际项目中。

一、PreferencesUtil监听核心API

PreferencesUtil 提供了以下数据监听方法:

方法 说明 参数 使用场景
onDataChange(callback) 订阅数据变化 callback 实时配置感知
offDataChange(callback) 取消数据变化订阅 callback 释放资源

1.1 核心特性

  • 简洁易用:封装复杂API为一行调用,降低使用门槛
  • 类型安全:完整的TypeScript类型定义,编译期即可发现错误
  • 异常处理:内置异常捕获机制,避免运行时崩溃
  • 实时感知:数据变化时立即触发回调

1.2 监听应用场景

场景 监听Key 响应行为
主题切换 theme 更新UI主题
语言变更 language 刷新文本
登录状态 is_logged_in 更新导航栏

二、完整使用步骤

2.1 安装依赖

bash 复制代码
ohpm install @pura/harmony-utils

2.2 订阅数据变化

typescript 复制代码
import { PreferencesUtil } from '@pura/harmony-utils';

private dataCallback = (key: string) => {
  this.result = `数据变化: ${key}`;
};

aboutToAppear() {
  PreferencesUtil.onDataChange(this.dataCallback);
}

aboutToDisappear() {
  PreferencesUtil.offDataChange(this.dataCallback);
}

2.3 实时响应配置变化

typescript 复制代码
PreferencesUtil.onDataChange((key) => {
  if (key === 'theme') {
    this.loadTheme();
  } else if (key === 'language') {
    this.loadLanguage();
  }
});

三、完整页面示例

typescript 复制代码
import { PreferencesUtil } from '@pura/harmony-utils';

@Entry
@Component
struct PrefListenerDemo {
  @State result: string = '等待数据变化...';

  aboutToAppear() {
    PreferencesUtil.onDataChange((key) => {
      this.result = `数据变化: ${key}`;
    });
  }

  aboutToDisappear() {
    PreferencesUtil.offDataChange();
  }

  build() {
    Column({ space: 12 }) {
      Button('修改数据触发监听').width('100%').onClick(async () => {
        await PreferencesUtil.putString('test_key', 'new_value');
        await PreferencesUtil.flush();
      });
      Text(this.result).fontSize(14).fontColor('#333333')
    }
    .padding(16)
  }
}

四、进阶用法

4.1 配置变化管理器

typescript 复制代码
import { PreferencesUtil } from '@pura/harmony-utils';

class ConfigManager {
  private static handlers: Record<string, Function> = {};

  static init(): void {
    PreferencesUtil.onDataChange((key: string) => {
      let handler = ConfigManager.handlers[key];
      if (handler) handler();
    });
  }

  static register(key: string, handler: Function): void {
    ConfigManager.handlers[key] = handler;
  }
}

4.2 主题切换响应

typescript 复制代码
ConfigManager.register('theme', () => {
  let theme = PreferencesUtil.getString('theme', 'light');
  AppStorage.setOrCreate('currentTheme', theme);
});

五、注意事项

  1. 回调引用:注册和取消需使用同一回调引用
  2. 生命周期:页面销毁时务必取消订阅
  3. 性能:回调中避免耗时操作
  4. 初始化依赖 :使用前需确保 AppUtil.init() 已调用
  5. flush触发:数据变化需flush后才触发回调

六、常见问题

Q1: 数据变化后回调不触发?

确保调用了flush()方法,只有持久化后才会触发变化通知。

Q2: 可以监听特定key的变化吗?

回调参数包含变化的key,可以在回调中判断具体key。

Q3: 多次订阅会触发多次吗?

是的,每个订阅的回调都会触发,注意避免重复订阅。

Q4: 取消订阅后还会收到回调吗?

不会,取消订阅后不再触发回调。

总结

PreferencesUtil 的数据监听方法为配置变化实时感知提供了便捷支持。本文详细介绍了核心API、使用步骤、完整示例、进阶用法以及常见问题的解决方案。合理使用数据监听,可以实现主题切换、语言变更等实时响应功能。

本文基于 @pura/harmony-utils 工具库,更多功能请参考官方文档与后续系列文章。

相关推荐
啊啊啊啊啊!!!!5 分钟前
【Linux】初始Linux操作系统
linux·运维·服务器
数字新视界15 分钟前
信创动环监控厂家深入剖析智能机房环境监控技术应用与挑战
服务器·数据库·物联网·芯片·动环监控系统
2401_8949155334 分钟前
新手落地 Geo 优化:源码下载、依赖安装、数据库初始化完整步骤
运维·服务器·数据库·人工智能·缓存·开源
杨云龙UP1 小时前
Oracle ASH 报告详解:与 AWR 的区别、使用场景及生成方法
linux·运维·服务器·数据库·oracle
黑泽明*1 小时前
LVS-Keepalived-全解析
服务器·开发语言·笔记·学习·php
贾伟康1 小时前
【万能转换器|18】HarmonyOS ArkTS 权限与隐私实战:让 module.json5、功能说明和拒绝路径一致
移动开发·harmonyos·arkts·权限管理·隐私合规
贾伟康1 小时前
【万能转换器|19】HarmonyOS ArkTS 回归测试实战:覆盖启动、空数据、异常输入和重复点击
软件测试·移动开发·harmonyos·arkts·回归测试
琥珀色糖2 小时前
Linux makefile
linux·运维·服务器·makefile·make
2401_894915532 小时前
Geo 优化源码部署避坑指南:解决访问异常、定位失效、收录卡顿问题
java·服务器·后端·缓存·开源
whyutianict_vv2 小时前
HCIE-Storage存储3.0排错题实战:归因框架与排查命令
linux·服务器·网络