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 模型组件的核心生命周期