Preferences
Android开发程序员对此应该很熟悉,HarmonyOS里的Preferences跟Android里的SharePreference差不多,应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。当用户希望有一个全局唯一存储的地方,可以采用用户首选项来进行存储。Preferences会将该数据缓存在内存中,当用户读取的时候,能够快速从内存中获取数据,当需要持久化时可以使用flush接口将内存中的数据写入持久化文件中。Preferences会随着存放的数据量越多而导致应用占用的内存越大,因此,Preferences不适合存放过多的数据,建议存储的数据不超过一万条,否则会在内存方面产生较大的开销。适用的场景一般为应用保存用户的个性化设置(字体大小,是否开启夜间模式)等。
其运行原理如下:
![]()
应用实例
初始化preferences
- 通过import { preferences } from ‘@kit.ArkData’;导入组件
- 使用context和文件名组件初始化Preferences ,注意是异步初始化
import { preferences } from '@kit.ArkData';
const TAG: string = '[Index]'
const PREFERENCES_NAME = 'theme.db'
//主题样式
const THEME_NAMES: string[] = ['default', 'simplicity', 'pomeloWhtie']
let preferenceTheme: preferences.Preferences | null = null
struct Index {
nowTheme: string = ''
async aboutToAppear() {
//从内存中获取轻量级存储db文件
await this.getPreferencesFromStorage()
//省略部分代码
}
//使用异步初始化Preferences
async getPreferencesFromStorage() {
let context = getContext(this) as Context
preferenceTheme = await preferences.getPreferences(context, PREFERENCES_NAME)
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
保存并持久化数据
- 通过put(k,v)方法保存数据
- 通过flush将数据持久化到本地
async putPreference(data: string) {
if (preferenceTheme !== null) {
await preferenceTheme.put('theme', data)
await preferenceTheme.flush()
}
}
- 1
- 2
- 3
- 4
- 5
- 6
获取数据
- 通过get方法获取数据,该数据返回一个Promise
async getPreference(): Promise<string> {
Logger.info(TAG, `Get begin`)
let theme: string = ''
if (preferenceTheme !== null) {
theme = await preferenceTheme.get('theme', 'default') as string
return theme
}
return theme
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 使用方法
struct Index {
nowTheme: string = ''
themeDatas: Array<ImageAndName> = []
async aboutToAppear() {
//从内存中获取轻量级存储db文件
await this.getPreferencesFromStorage()
//从轻量级存储db文件中获取键名为theme的键值
this.nowTheme = await this.getPreference()
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
评论记录:
回复评论: