Preferences
- Preferences
- 应用实例
- 初始化preferences
- 保存并持久化数据
- 获取数据
- 参考资料
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 ContextpreferenceTheme = await preferences.getPreferences(context, PREFERENCES_NAME)}
保存并持久化数据
- 通过put(k,v)方法保存数据
- 通过flush将数据持久化到本地
async putPreference(data: string) {if (preferenceTheme !== null) {await preferenceTheme.put('theme', data)await preferenceTheme.flush()}}
获取数据
- 通过get方法获取数据,该数据返回一个Promise
async getPreference(): Promise<string> {Logger.info(TAG, `Get begin`)let theme: string = ''if (preferenceTheme !== null) {theme = await preferenceTheme.get('theme', 'default') as stringreturn theme}return theme}
- 使用方法
Index { nowTheme: string = '' themeDatas: Array<ImageAndName> = []async aboutToAppear() {//从内存中获取轻量级存储db文件await this.getPreferencesFromStorage()//从轻量级存储db文件中获取键名为theme的键值this.nowTheme = await this.getPreference()}}
struct
参考资料
通过用户首选项实现数据持久化
本文demo源码