鸿蒙——首选项

1、首选项是什么

Preferences:鸿蒙轻量级 键值对存储,核心用于持久化保存用户/应用的轻量配置(数字、字符串、布尔等简单类型)

2、Preference步骤

简单可概括为:实例化-存入内存中-关闭之后丢失

具体操作流程:

  • 实例化(getPreferencesSync):获取操作句柄(打开 "记事本")
  • putSync(key, value):把数据写入内存 缓存区(记事本里临时写内容未保存)
  • flush() :将内存缓存区的数据刷入本地文件(保存到硬盘,真正持久化)

若只putSync不flush:应用进程退出后,内存数据丢失,本地文件无更新

读取流程:

getSync(key, 默认值):先读内存缓存 → 内存无则读本地文件 → 文件无则返回默认值。

注意:生命周期函数的核心逻辑(读写preferences)依赖UIAbilityContext,所以才需要先获取它。即preferences必须传入UIAbilityContext作为参数,才能定位到对应存储 空间(preferences是基于 UIAbility 维度隔离存储)。

3、具体详细介绍

获取上下文

private cpntext:common.UIAbilityContext =getContext(this) as common.UIAbilityContext

核心作用:获取 当前页面所属的UIAbility上下文

重要内容细解:

|------------------|----------------------------|
| getContext(this) | as common.UIAbilityContext |
| 在当前index组件得到上下文 | 确保获取的类型是UIAbilityContext类型 |

cpntext:这个是具体的上下文名称,可改变

UIAbility :是鸿蒙应用的核心组件,管理页面生命周期、资源等

页面生命周期函数

1、onPageShow()

定义:页面显示时触发 (如首次打开、从后台切回、从其他页面返回)可简单理解为操作

核心逻辑:读取持久化存储的字体大小,赋值给fontsize(上一次的字体大小)

详解:

let preinsttamce = preferences.getPreferencesSync(this.cpntext,{name:'fonsize-01'})

preferences.getPreferencesSync():同步获取preferences实例(Sync表示同步 方法,无回调

参数 1:this.cpntext → UIAbility 上下文(定位存储空间)

参数 2:{name:'fonsize-01'} → 存储文件的名称(自定义,相同名称为同一套键值对)

作用:创建 / 打开名为fonsize-01的 preferences 存储实例,后续通过该实例读写数据

this.fontsize =preinsttamce.getSync('j',20) as number

  • preinsttamce.get Sync('j',20):从 preferences 实例中同步读取键值对
  • as number:类型断言,确保读取的值是数字类型

参数 1:'j' → 要读取的键名(自定义,这里用j 表示字体大小的键)

参数 2:20 → 默认值(如果键j不存在,返回 20)

作用:将读取到的字体大小赋值给fontsize,页面显示时自动应用该值。

2、onPageHide()

定义:页面隐藏时触发(如切到后台、跳转到其他页面、关闭页面),可简单理解为操作

核心逻辑:将当前的fontsize值保存到 preferences,实现 "修改后持久化";

详解:

let option:preferences.Options={name:"fonsize-01"}

理解:定义preferences的配置项,指定存储文件名称为fonsize-01;preferences.Options:鸿蒙内置类型,约束配置项的格式(TypeScript 类型)。

let preinsttamce = preferences.getPreferencesSync(this.cpntext,option)

获取名为fonsize-01的 preferences 实例-->打开文件

preinsttamce.putSync('j',this.fontsize)

put Sync(key, value):同步写入键值对

键:'j'(和读取时的键一致),值:当前的fontsize(用户修改后的字体大小)

注意:putSync只是写入内存,未真正保存到本地文件。

preinsttamce.flush()

核心:将内存中的键值对持久化到本地文件(如果不调用 flush,修改只会留在内存,页面重启后丢失)

作用:确保字体大小的修改被真正保存

总体代码实现

复制代码
import { common } from '@kit.AbilityKit';
import { preferences } from '@kit.ArkData';

@Entry
@Component
struct Preference {
  @State fontsize:number = 30;
  private cpntext:common.UIAbilityContext =getContext(this) as  common.UIAbilityContext  //上下文
  //自定义生命周期
  //显示时
  onPageShow(): void
  {
    let preinsttamce = preferences.getPreferencesSync(this.cpntext,{name:'fonsize-01'})
    this.fontsize =preinsttamce.getSync('j',20) as number //赋值
  }
  //隐藏时
  onPageHide(): void {
    let option:preferences.Options={name:"fonsize-01"}
    let preinsttamce = preferences.getPreferencesSync(this.cpntext,option)
    preinsttamce.putSync('j',this.fontsize) //保存当前字体大小
    preinsttamce.flush() //持久化
  }
  build() {
    Column(){
      Text('SXSXSXSXSXSXSX').height(90).fontSize(this.fontsize)
      //文本框输入-将字体大小与输入值绑定
      TextInput({placeholder:'输入大小'}).width('100%').margin(10)
        .onChange((value)=>{
          this.fontsize=Number.parseInt(value)
        })
    }
    .height('100%')
    .width('100%')
  }

扩展内容:

鸿蒙Stage 模型下的 UI 页面组件(Index),核心功能是:展示可动态调整字体大小的文本;

通过文本输入框修改字体大小;利用鸿蒙的preferences(首选项)持久化存储字体大小,页面隐藏 / 显示时自动保存 / 读取配置。

为什么是这个模型,因为

  • 依赖 Stage 模型的 UIAbilityContext
  • 遵循 Stage 模型 preferences 的调用规则
  • 页面生命周期(onPageShow/onPageHide)也是 Stage 模型组件的核心生命周期
相关推荐
hqk2 小时前
鸿蒙 ArkUI 从零到精通:基础语法全解析
android·前端·harmonyos
奔跑的露西ly6 小时前
【HarmonyOS NEXT】引入外部模块的两种方式:本地复用与私仓共享
华为·harmonyos
遇到困难睡大觉哈哈6 小时前
Harmony os LazyForEach:数据懒加载详解
服务器·网络·windows·harmonyos·鸿蒙
MrTan6 小时前
Uni-App 鸿蒙应用微信相关功能上架踩坑:自制微信安装检测插件
uni-app·harmonyos
SmartBrain6 小时前
思考:用信任创造共同的远方
人工智能·华为·创业创新
遇到困难睡大觉哈哈7 小时前
Harmony os 卡片传递消息给应用(message 事件)详细介绍
java·服务器·javascript·harmonyos·鸿蒙
周倦岚7 小时前
【HarmonyOS】用户通知服务
华为·harmonyos
晚霞的不甘7 小时前
开源鸿蒙(OpenHarmony)实战入门:从 Hello World 到 UI 交互设计
ui·开源·harmonyos
鲜枣课堂7 小时前
聊聊华为新推出的无网应急通信
网络·华为