• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.data.sendablePreferences (共享用户首选项)
2<!--Kit: ArkData-->
3<!--Subsystem: DistributedDataManager-->
4<!--Owner: @yanhuii-->
5<!--Designer: @houpengtao1-->
6<!--Tester: @yippo; @logic42-->
7<!--Adviser: @ge-yafang-->
8
9
10共享用户首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。
11
12数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括number、string、boolean、bigint以及可序列化的object。
13
14共享用户首选项的持久化文件存储在[preferencesDir](../../application-models/application-context-stage.md#获取应用文件路径)路径下,创建preferences对象前,需要保证preferencesDir路径可读写。持久化文件存储路径中的[加密等级](../apis-ability-kit/js-apis-app-ability-contextConstant.md#areamode)会影响文件的可读写状态,路径访问限制详见[应用文件目录与应用文件路径](../../file-management/app-sandbox-directory.md#应用文件目录与应用文件路径)。
15
16共享用户首选项可以在ArkTS并发实例间(包括主线程、TaskPool&Worker工作线程)传递,传递的行为是引用传递,性能优于普通的[用户首选项](js-apis-data-preferences.md),可参考[Sendable使用场景](../../arkts-utils/sendable-guide.md)。
17
18> **说明:**
19>
20> 本模块首批接口从API version 12开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
21>
22> 共享用户首选项无法保证进程并发安全,会有文件损坏和数据丢失的风险,不支持在多进程场景下使用。
23
24## 导入模块
25
26```ts
27import { sendablePreferences } from '@kit.ArkData';
28```
29
30## 常量
31
32**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
33
34**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
35
36| 名称             | 类型      | 只读 | 说明                                    |
37| ---------------- | -------- | ---- | --------------------------------------- |
38| MAX_KEY_LENGTH   | number   | 是   | Key的最大长度限制为1024个字节。     |
39| MAX_VALUE_LENGTH | number   | 是   | Value的最大长度限制为16MB。 |
40
41## sendablePreferences.getPreferences
42
43getPreferences(context: Context, options: Options): Promise&lt;Preferences&gt;
44
45获取Preferences实例,使用Promise异步回调。
46
47**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
48
49**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
50
51**参数:**
52
53| 参数名  | 类型             | 必填 | 说明                                                                                                                                                                           |
54| ------- | ---------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
55| context | [Context](../apis-ability-kit/js-apis-inner-application-baseContext.md)          | 是   | 应用上下文。 |
56| options | [Options](#options) | 是   | 与Preferences实例相关的配置选项。        |
57
58**返回值:**
59
60| 类型                                    | 说明                               |
61| --------------------------------------- | ---------------------------------- |
62| Promise&lt;[Preferences](#preferences)&gt; | Promise对象,返回Preferences实例。<br>该实例继承[ISendable](../../arkts-utils/arkts-sendable.md#isendable),可以在ArkTS并发实例间(包括主线程、TaskPool&Worker工作线程)传递,传递的行为是引用传递,参考[Sendable使用场景](../../arkts-utils/sendable-guide.md)。 |
63
64**错误码:**
65
66以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
67
68| 错误码ID | 错误信息                        |
69| -------- | ------------------------------ |
70| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
71| 801      | Capability not supported.     |
72| 15500000 | Inner error.                   |
73| 15501001 | The operations is supported in stage mode only. |
74| 15501002 | Invalid dataGroupId.     |
75
76**示例:**
77
78```ts
79import { UIAbility } from '@kit.AbilityKit';
80import { BusinessError } from '@kit.BasicServicesKit';
81import { window } from '@kit.ArkUI';
82
83let preferences: sendablePreferences.Preferences;
84
85class EntryAbility extends UIAbility {
86  onWindowStageCreate(windowStage: window.WindowStage) {
87    let options: sendablePreferences.Options = { name: 'myStore' };
88    let promise = sendablePreferences.getPreferences(this.context, options);
89    promise.then((object: sendablePreferences.Preferences) => {
90      preferences = object;
91      console.info("Succeeded in getting preferences.");
92    }).catch((err: BusinessError) => {
93      console.error(`Failed to get preferences. code: ${err.code}, message: ${err.message}`);
94    });
95  }
96}
97```
98
99## sendablePreferences.getPreferencesSync
100
101getPreferencesSync(context: Context, options: Options): Preferences
102
103获取Preferences实例,此为同步接口。
104
105**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
106
107**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
108
109**参数:**
110
111| 参数名  | 类型                  | 必填 | 说明                                                         |
112| ------- | --------------------- | ---- | ------------------------------------------------------------ |
113| context | [Context](../apis-ability-kit/js-apis-inner-application-baseContext.md)               | 是   | 应用上下文。 |
114| options | [Options](#options) | 是   | 与Preferences实例相关的配置选项。                            |
115
116**返回值:**
117
118| 类型                        | 说明                  |
119| --------------------------- | --------------------- |
120| [Preferences](#preferences) | 返回Preferences实例。<br>该实例继承[ISendable](../../arkts-utils/arkts-sendable.md#isendable),可以在ArkTS并发实例间(包括主线程、TaskPool&Worker工作线程)传递,传递的行为是引用传递,参考[Sendable使用场景](../../arkts-utils/sendable-guide.md)。 |
121
122**错误码:**
123
124以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
125
126| 错误码ID | 错误信息                        |
127| -------- | ------------------------------ |
128| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
129| 801      | Capability not supported.     |
130| 15500000 | Inner error.                   |
131| 15501001 | The operations is supported in stage mode only.   |
132| 15501002 | Invalid dataGroupId. |
133
134**示例:**
135
136```ts
137import { UIAbility } from '@kit.AbilityKit';
138import { window } from '@kit.ArkUI';
139
140let preferences: sendablePreferences.Preferences;
141
142class EntryAbility extends UIAbility {
143  onWindowStageCreate(windowStage: window.WindowStage) {
144    let options: sendablePreferences.Options = { name: 'myStore' };
145    preferences = sendablePreferences.getPreferencesSync(this.context, options);
146  }
147}
148```
149
150## sendablePreferences.deletePreferences
151
152deletePreferences(context: Context, options: Options): Promise&lt;void&gt;
153
154从缓存中删除指定的Preferences实例,若Preferences实例有对应的持久化文件,则同时删除其持久化文件。使用Promise异步回调。
155
156调用该接口后,不建议再使用旧的Preferences实例进行数据操作,否则会导致数据一致性问题。
157
158**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
159
160**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
161
162**参数:**
163
164| 参数名  | 类型             | 必填 | 说明                                                                         |
165| ------- | ---------------- | ---- | ----------------------------------------------------------------------------|
166| context | [Context](../apis-ability-kit/js-apis-inner-application-baseContext.md)          | 是   | 应用上下文。 |
167| options | [Options](#options) | 是   | 与Preferences实例相关的配置选项。                                                                            |
168
169**返回值:**
170
171| 类型                | 说明                      |
172| ------------------- | ------------------------- |
173| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
174
175**错误码:**
176
177以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
178
179| 错误码ID | 错误信息                        |
180| -------- | ------------------------------ |
181| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
182| 801      | Capability not supported.     |
183| 15500000 | Inner error.                   |
184| 15500010 | Failed to delete the user preferences persistence file. |
185| 15501001 | The operations is supported in stage mode only. |
186| 15501002 | Invalid dataGroupId. |
187
188**示例:**
189
190```ts
191import { UIAbility } from '@kit.AbilityKit';
192import { BusinessError } from '@kit.BasicServicesKit';
193import { window } from '@kit.ArkUI';
194
195class EntryAbility extends UIAbility {
196  onWindowStageCreate(windowStage: window.WindowStage) {
197    let options: sendablePreferences.Options = { name: 'myStore' };
198    let promise = sendablePreferences.deletePreferences(this.context, options);
199    promise.then(() => {
200      console.info("Succeeded in deleting preferences.");
201    }).catch((err: BusinessError) => {
202      console.error(`Failed to delete preferences. code: ${err.code}, message: ${err.message}`);
203    });
204  }
205}
206```
207
208## sendablePreferences.removePreferencesFromCache
209
210removePreferencesFromCache(context: Context, options: Options): Promise&lt;void&gt;
211
212从缓存中移除指定的Preferences实例,使用Promise异步回调。
213
214应用首次调用[getPreferences](#sendablepreferencesgetpreferences)接口获取某个Preferences实例后,该实例会被缓存起来,后续调用[getPreferences](#sendablepreferencesgetpreferences)时不会再次从持久化文件中读取,直接从缓存中获取Preferences实例。调用此接口移除缓存中的实例之后,再次getPreferences将会重新读取持久化文件,生成新的Preferences实例。
215
216**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
217
218**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
219
220**参数:**
221
222| 参数名  | 类型             | 必填 | 说明                                                                                                                      |
223| ------- | ---------------- | ---- | ----------------------------------------------------------------------------------------------------------------------- |
224| context | [Context](../apis-ability-kit/js-apis-inner-application-baseContext.md)          | 是   | 应用上下文。 |
225| options | [Options](#options) | 是   | 与Preferences实例相关的配置选项。                                                                                    |
226
227**返回值:**
228
229| 类型                | 说明                      |
230| ------------------- | ------------------------- |
231| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
232
233**错误码:**
234
235以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
236
237| 错误码ID | 错误信息                        |
238| -------- | ------------------------------ |
239| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
240| 801      | Capability not supported.     |
241| 15500000 | Inner error.                   |
242| 15501001 | The operations is supported in stage mode only. |
243| 15501002 | Invalid dataGroupId.     |
244
245**示例:**
246
247```ts
248import { UIAbility } from '@kit.AbilityKit';
249import { BusinessError } from '@kit.BasicServicesKit';
250import { window } from '@kit.ArkUI';
251
252class EntryAbility extends UIAbility {
253  onWindowStageCreate(windowStage: window.WindowStage) {
254    let options: sendablePreferences.Options = { name: 'myStore' };
255    let promise = sendablePreferences.removePreferencesFromCache(this.context, options);
256    promise.then(() => {
257      console.info("Succeeded in removing preferences.");
258    }).catch((err: BusinessError) => {
259      console.error(`Failed to remove preferences. code: ${err.code}, message: ${err.message}`);
260    });
261  }
262}
263```
264
265## sendablePreferences.removePreferencesFromCacheSync
266
267removePreferencesFromCacheSync(context: Context, options: Options):void
268
269从缓存中移除指定的Preferences实例,此为同步接口。
270
271应用首次调用[getPreferences](#sendablepreferencesgetpreferences)接口获取某个Preferences实例后,该实例会被缓存起来,后续调用[getPreferences](#sendablepreferencesgetpreferences)时不会再次从持久化文件中读取,直接从缓存中获取Preferences实例。调用此接口移除缓存中的实例之后,再次getPreferences将会重新读取持久化文件,生成新的Preferences实例。
272
273**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
274
275**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
276
277**参数:**
278
279| 参数名  | 类型                  | 必填 | 说明                                                         |
280| ------- | --------------------- | ---- | ------------------------------------------------------------ |
281| context | [Context](../apis-ability-kit/js-apis-inner-application-baseContext.md)               | 是   | 应用上下文。 |
282| options | [Options](#options) | 是   | 与Preferences实例相关的配置选项。                            |
283
284**错误码:**
285
286以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
287
288| 错误码ID | 错误信息                        |
289| -------- | ------------------------------ |
290| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
291| 801      | Capability not supported.     |
292| 15500000 | Inner error.                   |
293| 15501001 | The operations is supported in stage mode only.   |
294| 15501002 | Invalid dataGroupId. |
295
296**示例:**
297
298```ts
299import { UIAbility } from '@kit.AbilityKit';
300import { window } from '@kit.ArkUI';
301
302class EntryAbility extends UIAbility {
303  onWindowStageCreate(windowStage: window.WindowStage) {
304    let options: sendablePreferences.Options = { name: 'myStore' };
305    sendablePreferences.removePreferencesFromCacheSync(this.context, options);
306  }
307}
308```
309
310## Options
311
312Preferences实例配置选项。
313
314**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
315
316**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
317
318| 名称        | 类型   | 必填 | 说明                                                         |
319| ----------- | ------ | ---- | ------------------------------------------------------------ |
320| name        | string | 是   | Preferences实例的名称。                                      |
321| dataGroupId | string\|null | 否   | 应用组ID,<!--RP1-->暂不支持指定dataGroupId在对应共享沙箱路径下创建Preferences实例。<!--RP1End--><br/>为可选参数。指定在此dataGroupId对应的沙箱路径下创建Preferences实例。当此参数不填时,默认在本应用沙箱目录下创建Preferences实例。<br/> **模型约束:** 此属性仅在Stage模型下可用。|
322
323
324## Preferences
325
326Preferences继承自[ISendable](../../arkts-utils/arkts-sendable.md#isendable),可以在ArkTS并发实例间(包括主线程、TaskPool&Worker工作线程)传递,传递的行为是引用传递,提供获取和修改存储数据的接口。
327
328下列接口都需先使用[sendablePreferences.getPreferences](#sendablepreferencesgetpreferences)获取到Preferences实例,再通过此实例调用对应接口。
329
330### get
331
332get(key: string, defValue: lang.ISendable): Promise&lt;lang.ISendable&gt;
333
334从缓存的Preferences实例中获取键对应的值,如果值为null或者非默认值类型,返回默认数据defValue,使用Promise异步回调。
335
336**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
337
338**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
339
340 **参数:**
341
342| 参数名   | 类型                    | 必填 | 说明  |
343| -------- | ----------------------- | ---- |--------|
344| key      | string                  | 是   | 要获取的存储Key名称,不能为空。  |
345| defValue | [lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable) | 是   | 默认返回值。 |
346
347**返回值:**
348
349| 类型                                | 说明                          |
350| ----------------------------------- | ----------------------------- |
351| Promise&lt;[lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable)&gt; | Promise对象,返回键对应的值。 <br>该实例继承[ISendable](../../arkts-utils/arkts-sendable.md#isendable),可以在ArkTS并发实例间(包括主线程、TaskPool&Worker工作线程)传递,传递的行为是引用传递,参考[Sendable使用场景](../../arkts-utils/sendable-guide.md)。|
352
353**错误码:**
354
355以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
356
357| 错误码ID | 错误信息                        |
358| -------- | ------------------------------ |
359| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
360| 15500000 | Inner error.                   |
361
362**示例:**
363
364```ts
365import { BusinessError } from '@kit.BasicServicesKit';
366import { lang } from '@kit.ArkTS';
367
368let promise = preferences.get('startup', 'default');
369promise.then((data: lang.ISendable) => {
370  let dataStr = data as string;
371  console.info(`Succeeded in getting value of 'startup'. Data: ${dataStr}`);
372}).catch((err: BusinessError) => {
373  console.error(`Failed to get value of 'startup'. code: ${err.code}, message: ${err.message}`);
374});
375```
376
377### getSync
378
379getSync(key: string, defValue: lang.ISendable): lang.ISendable
380
381从缓存的Preferences实例中获取键对应的值,如果值为null或者非默认值类型,返回默认数据defValue,此为同步接口。
382
383**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
384
385**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
386
387**参数:**
388
389| 参数名   | 类型                    | 必填 | 说明            |
390| -------- | ----------------------- | ---- |---------------------|
391| key      | string                  | 是   | 要获取的存储Key名称,不能为空。  |
392| defValue | [lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable) | 是   | 默认返回值。 |
393
394**返回值:**
395
396| 类型                                | 说明                          |
397| ----------------------------------- | ----------------------------- |
398| [lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable) | 返回键对应的值。 <br>该实例继承[ISendable](../../arkts-utils/arkts-sendable.md#isendable),可以在ArkTS并发实例间(包括主线程、TaskPool&Worker工作线程)传递,传递的行为是引用传递,参考[Sendable使用场景](../../arkts-utils/sendable-guide.md)。|
399
400**错误码:**
401
402以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
403
404| 错误码ID | 错误信息                        |
405| -------- | ------------------------------ |
406| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
407| 15500000 | Inner error.                   |
408
409**示例:**
410
411```ts
412import { lang } from '@kit.ArkTS';
413let value: lang.ISendable = preferences.getSync('startup', 'default');
414```
415
416### getAll
417
418getAll(): Promise&lt;lang.ISendable&gt;
419
420获取缓存的Preferences实例中的所有键值数据。
421
422**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
423
424**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
425
426**返回值:**
427
428| 类型                  | 说明                                        |
429| --------------------- | ------------------------------------------- |
430| Promise&lt;[lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable)&gt; | Promise对象,返回所有包含的键值数据。 <br>该对象继承[ISendable](../../arkts-utils/arkts-sendable.md#isendable),可以在ArkTS并发实例间(包括主线程、TaskPool&Worker工作线程)传递,传递的行为是引用传递,参考[Sendable使用场景](../../arkts-utils/sendable-guide.md)。  |
431
432**错误码:**
433
434以下错误码的详细介绍请参见[用户首选项错误码](errorcode-preferences.md)。
435
436| 错误码ID | 错误信息                        |
437| -------- | ------------------------------ |
438| 15500000 | Inner error.                   |
439
440**示例:**
441
442```ts
443import { BusinessError } from '@kit.BasicServicesKit';
444import { lang } from '@kit.ArkTS';
445
446let promise = preferences.getAll();
447promise.then((keyValues: lang.ISendable) => {
448  for (let value of Object.keys(keyValues)) {
449    console.info("getAll " + JSON.stringify(value));
450  }
451}).catch((err: BusinessError) => {
452  console.error(`Failed to get all key-values. code: ${err.code}, message: ${err.message}`);
453});
454```
455
456### getAllSync
457
458getAllSync(): lang.ISendable
459
460获取缓存的Preferences实例中的所有键值数据,此为同步接口。
461
462**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
463
464**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
465
466**返回值:**
467
468| 类型                  | 说明                                        |
469| --------------------- | ------------------------------------------- |
470| [lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable) | 返回所有包含的键值数据。<br>该对象继承[ISendable](../../arkts-utils/arkts-sendable.md#isendable),可以在ArkTS并发实例间(包括主线程、TaskPool&Worker工作线程)传递,传递的行为是引用传递,参考[Sendable使用场景](../../arkts-utils/sendable-guide.md)。 |
471
472**错误码:**
473
474以下错误码的详细介绍请参见[用户首选项错误码](errorcode-preferences.md)。
475
476| 错误码ID | 错误信息                        |
477| -------- | ------------------------------ |
478| 15500000 | Inner error.                   |
479
480**示例:**
481
482```ts
483import { lang } from '@kit.ArkTS';
484
485let keyValues: lang.ISendable = preferences.getAllSync();
486for (let value of Object.keys(keyValues)) {
487  console.info("getAll " + JSON.stringify(value));
488}
489```
490
491### put
492
493put(key: string, value: lang.ISendable): Promise&lt;void&gt;
494
495将数据写入缓存的Preferences实例中,可通过[flush](#flush)将Preferences实例持久化,使用Promise异步回调。
496
497  > **说明:**
498  >
499  > 当value中包含非UTF-8格式的字符串时,请使用Uint8Array类型存储,否则会造成持久化文件出现格式错误造成文件损坏。
500  >
501  > 当对应的键已经存在时,put()方法会覆盖其值。可以使用hasSync()方法检查是否存在对应键值对。
502
503**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
504
505**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
506
507**参数:**
508
509| 参数名 | 类型                    | 必填 | 说明                         |
510| ------ | ----------------------- | ---- |--------------------------|
511| key    | string                  | 是   | 要修改的存储的Key,不能为空。  |
512| value  | [lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable) | 是   | 存储的新值。 |
513
514**返回值:**
515
516| 类型                | 说明                      |
517| ------------------- | ------------------------- |
518| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
519
520**错误码:**
521
522以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
523
524| 错误码ID | 错误信息                        |
525| -------- | ------------------------------ |
526| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
527| 15500000 | Inner error.                   |
528
529**示例:**
530
531```ts
532import { BusinessError } from '@kit.BasicServicesKit';
533
534let promise = preferences.put('startup', 'auto');
535promise.then(() => {
536  console.info("Succeeded in putting value of 'startup'.");
537}).catch((err: BusinessError) => {
538  console.error(`Failed to put value of 'startup'. code: ${err.code}, message: ${err.message}`);
539});
540```
541
542### putSync
543
544putSync(key: string, value: lang.ISendable): void
545
546将数据写入缓存的Preferences实例中,可通过[flush](#flush)将Preferences实例持久化,此为同步接口。
547
548  > **说明:**
549  >
550  > 当value中包含非UTF-8格式的字符串时,请使用Uint8Array类型存储,否则会造成持久化文件出现格式错误造成文件损坏。
551  >
552  > 当对应的键已经存在时,putSync()方法会覆盖其值。可以使用hasSync()方法检查是否存在对应键值对。
553
554**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
555
556**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
557
558**参数:**
559
560| 参数名 | 类型                    | 必填 | 说明                                                         |
561| ------ | ----------------------- | ---- | ------------------------ |
562| key    | string                  | 是   | 要修改的存储的Key,不能为空。 |
563| value  | [lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable) | 是   | 存储的新值。 |
564
565**错误码:**
566
567以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
568
569| 错误码ID | 错误信息                        |
570| -------- | ------------------------------ |
571| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
572| 15500000 | Inner error.                   |
573
574**示例:**
575
576```ts
577preferences.putSync('startup', 'auto');
578```
579
580### has
581
582has(key: string): Promise&lt;boolean&gt;
583
584检查缓存的Preferences实例中是否包含名为给定Key的存储键值对,使用Promise异步回调。
585
586**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
587
588**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
589
590**参数:**
591
592| 参数名 | 类型   | 必填 | 说明                            |
593| ------ | ------ | ---- | ------------------------------- |
594| key    | string | 是   | 要检查的存储key名称,不能为空。 |
595
596**返回值:**
597
598| 类型                   | 说明                                                         |
599| ---------------------- | ------------------------------------------------------------ |
600| Promise&lt;boolean&gt; | Promise对象。返回Preferences实例是否包含给定key的存储键值对,true表示存在,false表示不存在。 |
601
602**错误码:**
603
604以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
605
606| 错误码ID | 错误信息                        |
607| -------- | ------------------------------ |
608| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
609| 15500000 | Inner error.                   |
610
611**示例:**
612
613```ts
614import { BusinessError } from '@kit.BasicServicesKit';
615
616let promise = preferences.has('startup');
617promise.then((val: boolean) => {
618  if (val) {
619    console.info("The key 'startup' is contained.");
620  } else {
621    console.error("The key 'startup' does not contain.");
622  }
623}).catch((err: BusinessError) => {
624  console.error(`Failed to check the key 'startup'. code: ${err.code}, message: ${err.message}`);
625});
626```
627
628### hasSync
629
630hasSync(key: string): boolean
631
632检查缓存的Preferences实例中是否包含名为给定Key的存储键值对,此为同步接口。
633
634**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
635
636**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
637
638**参数:**
639
640| 参数名 | 类型   | 必填 | 说明                            |
641| ------ | ------ | ---- | ------------------------------- |
642| key    | string | 是   | 要检查的存储key名称,不能为空。 |
643
644**返回值:**
645
646| 类型                   | 说明                                                         |
647| ---------------------- | ------------------------------------------------------------ |
648| boolean | 返回Preferences实例是否包含给定key的存储键值对,true表示存在,false表示不存在。 |
649
650**错误码:**
651
652以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
653
654| 错误码ID | 错误信息                        |
655| -------- | ------------------------------ |
656| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
657| 15500000 | Inner error.                   |
658
659**示例:**
660
661```ts
662let isExist: boolean = preferences.hasSync('startup');
663if (isExist) {
664  console.info("The key 'startup' is contained.");
665} else {
666  console.error("The key 'startup' does not contain.");
667}
668```
669
670### delete
671
672delete(key: string): Promise&lt;void&gt;
673
674从缓存的Preferences实例中删除名为给定Key的存储键值对,可通过[flush](#flush)将Preferences实例持久化,使用Promise异步回调。
675
676**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
677
678**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
679
680**参数:**
681
682| 参数名 | 类型   | 必填 | 说明                            |
683| ------ | ------ | ---- | ------------------------------- |
684| key    | string | 是   | 要删除的存储key名称,不能为空。 |
685
686**返回值:**
687
688| 类型                | 说明                      |
689| ------------------- | ------------------------- |
690| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
691
692**错误码:**
693
694以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
695
696| 错误码ID | 错误信息                        |
697| -------- | ------------------------------ |
698| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
699| 15500000 | Inner error.                   |
700
701**示例:**
702
703```ts
704import { BusinessError } from '@kit.BasicServicesKit';
705
706let promise = preferences.delete('startup');
707promise.then(() => {
708  console.info("Succeeded in deleting the key 'startup'.");
709}).catch((err: BusinessError) => {
710  console.error(`Failed to delete the key 'startup'. code: ${err.code}, message: ${err.message}`);
711});
712```
713
714### deleteSync
715
716deleteSync(key: string): void
717
718从缓存的Preferences实例中删除名为给定Key的存储键值对,可通过[flush](#flush)将Preferences实例持久化,此为同步接口。
719
720**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
721
722**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
723
724**参数:**
725
726| 参数名 | 类型   | 必填 | 说明                            |
727| ------ | ------ | ---- | ------------------------------- |
728| key    | string | 是   | 要删除的存储key名称,不能为空。 |
729
730**错误码:**
731
732以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
733
734| 错误码ID | 错误信息                        |
735| -------- | ------------------------------ |
736| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
737| 15500000 | Inner error.                   |
738
739**示例:**
740
741```ts
742preferences.deleteSync('startup');
743```
744
745### flush
746
747flush(): Promise&lt;void&gt;
748
749将缓存的Preferences实例中的数据异步存储到共享用户首选项的持久化文件中,使用Promise异步回调。
750
751  > **说明:**
752  >
753  > 当数据未修改或修改后的数据与缓存数据一致时,不会刷新持久化文件。
754
755**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
756
757**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
758
759**返回值:**
760
761| 类型                | 说明                      |
762| ------------------- | ------------------------- |
763| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
764
765**错误码:**
766
767以下错误码的详细介绍请参见[用户首选项错误码](errorcode-preferences.md)。
768
769| 错误码ID | 错误信息                        |
770| -------- | ------------------------------ |
771| 15500000 | Inner error.                   |
772
773**示例:**
774
775```ts
776import { BusinessError } from '@kit.BasicServicesKit';
777
778let promise = preferences.flush();
779promise.then(() => {
780  console.info("Succeeded in flushing.");
781}).catch((err: BusinessError) => {
782  console.error(`Failed to flush. code: ${err.code}, message: ${err.message}`);
783});
784```
785
786### flushSync<sup>14+</sup>
787
788flushSync(): void
789
790将缓存的Preferences实例中的数据存储到共享用户首选项的持久化文件中。
791
792  > **说明:**
793  >
794  > 当数据未修改或修改后的数据与缓存数据一致时,不会刷新持久化文件。
795
796**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
797
798**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
799
800**错误码:**
801
802以下错误码的详细介绍请参见[用户首选项错误码](errorcode-preferences.md)。
803
804| 错误码ID | 错误信息                        |
805| -------- | ------------------------------ |
806| 15500000 | Inner error.                   |
807
808**示例:**
809
810```ts
811preferences.flushSync();
812```
813
814### clear
815
816clear(): Promise&lt;void&gt;
817
818清除缓存的Preferences实例中的所有数据,可通过[flush](#flush)将Preferences实例持久化,使用Promise异步回调。
819
820**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
821
822**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
823
824**返回值:**
825
826| 类型                | 说明                      |
827| ------------------- | ------------------------- |
828| Promise&lt;void&gt; | 无返回结果的Promise对象。 |
829
830**错误码:**
831
832以下错误码的详细介绍请参见[用户首选项错误码](errorcode-preferences.md)。
833
834| 错误码ID | 错误信息                        |
835| -------- | ------------------------------ |
836| 15500000 | Inner error.                   |
837
838**示例:**
839
840```ts
841import { BusinessError } from '@kit.BasicServicesKit';
842
843let promise = preferences.clear();
844promise.then(() => {
845  console.info("Succeeded in clearing.");
846}).catch((err: BusinessError) => {
847  console.error(`Failed to clear. code: ${err.code}, message: ${err.message}`);
848});
849```
850
851### clearSync
852
853clearSync(): void
854
855清除缓存的Preferences实例中的所有数据,可通过[flush](#flush)将Preferences实例持久化,此为同步接口。
856
857**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
858
859**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
860
861**错误码:**
862
863以下错误码的详细介绍请参见[用户首选项错误码](errorcode-preferences.md)。
864
865| 错误码ID | 错误信息                        |
866| -------- | ------------------------------ |
867| 15500000 | Inner error.                   |
868
869**示例:**
870
871```ts
872preferences.clearSync();
873```
874
875### on('change')
876
877on(type: 'change', callback: Callback&lt;string&gt;): void
878
879订阅数据变更,订阅的Key的值发生变更后,在执行[flush](#flush)方法后,触发callback回调。
880
881  > **说明:**
882  >
883  > 当调用[removePreferencesFromCache](#sendablepreferencesremovepreferencesfromcache)或者[deletePreferences](#sendablepreferencesdeletepreferences)后,订阅的数据变更会主动取消订阅,在重新[getPreferences](#sendablepreferencesgetpreferences)后需要重新订阅数据变更。
884
885**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
886
887**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
888
889**参数:**
890
891| 参数名   | 类型     | 必填 | 说明                                     |
892| -------- | -------- | ---- | ---------------------------------------- |
893| type     | string   | 是   | 事件类型,固定值'change',表示数据变更。 |
894| callback | Callback&lt;string&gt; | 是   | 回调函数。返回发生变更的Key。     |
895
896**错误码:**
897
898以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
899
900| 错误码ID | 错误信息                        |
901| -------- | ------------------------------ |
902| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
903| 15500000 | Inner error.                   |
904
905**示例:**
906
907```ts
908import { BusinessError } from '@kit.BasicServicesKit';
909
910let observer = (key: string) => {
911  console.info("The key " + key + " changed.");
912};
913preferences.on('change', observer);
914preferences.putSync('startup', 'manual');
915preferences.flush().then(() => {
916  console.info("Succeeded in flushing.");
917}).catch((err: BusinessError) => {
918  console.error(`Failed to flush. code: ${err.code}, message: ${err.message}`);
919});
920```
921
922### on('multiProcessChange')
923
924on(type: 'multiProcessChange', callback: Callback&lt;string&gt;): void
925
926订阅进程间数据变更,多个进程持有同一个首选项文件时,在任意一个进程(包括本进程)执行[flush](#flush)方法,持久化文件发生变更后,触发callback回调。
927
928本接口提供给申请了[dataGroupId](#options)的应用进行使用,未申请的应用不推荐使用,多进程操作可能会损坏持久化文件,导致数据丢失。
929
930  > **说明:**
931  >
932  > 同一持久化文件在当前进程订阅进程间数据变更的最大数量为50次,超过最大限制后会订阅失败。建议在触发callback回调后及时取消订阅。
933  >
934  > 当调用[removePreferencesFromCache](#sendablepreferencesremovepreferencesfromcache)或者[deletePreferences](#sendablepreferencesdeletepreferences)后,订阅的数据变更会主动取消订阅,在重新[getPreferences](#sendablepreferencesgetpreferences)后需要重新订阅数据变更。
935
936**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
937
938**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
939
940**参数:**
941
942| 参数名   | 类型     | 必填 | 说明                                                         |
943| -------- | -------- | ---- | ------------------------------------------------------------ |
944| type     | string   | 是   | 事件类型,固定值'multiProcessChange',表示多进程间的数据变更。 |
945| callback | Callback&lt;string&gt; | 是   | 回调函数。返回发生变更的Key。                   |
946
947**错误码:**
948
949以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
950
951| 错误码ID | 错误信息                                |
952| -------- | -------------------------------------- |
953| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
954| 15500000 | Inner error.                           |
955| 15500019 | Failed to obtain the subscription service. |
956
957**示例:**
958
959```ts
960import { BusinessError } from '@kit.BasicServicesKit';
961
962let observer = (key: string) => {
963  console.info("The key " + key + " changed.");
964};
965preferences.on('multiProcessChange', observer);
966preferences.putSync('startup', 'manual');
967preferences.flush().then(() => {
968  console.info("Succeeded in flushing.");
969}).catch((err: BusinessError) => {
970  console.error(`Failed to flush. code: ${err.code}, message: ${err.message}`);
971});
972```
973
974### on('dataChange')
975
976on(type: 'dataChange', keys: Array&lt;string&gt;, callback: Callback&lt;lang.ISendable&gt;): void
977
978精确订阅数据变更,只有被订阅的key值发生变更后,在执行[flush](#flush)方法后,触发callback回调。
979
980  > **说明:**
981  >
982  > 当调用[removePreferencesFromCache](#sendablepreferencesremovepreferencesfromcache)或者[deletePreferences](#sendablepreferencesdeletepreferences)后,订阅的数据变更会主动取消订阅,在重新[getPreferences](#sendablepreferencesgetpreferences)后需要重新订阅数据变更。
983
984**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
985
986**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
987
988**参数:**
989
990| 参数名   | 类型                                                         | 必填 | 说明                                                         |
991| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
992| type     | string                                                       | 是   | 事件类型,固定值'dataChange',表示精确的数据变更。           |
993| keys     | Array&lt;string&gt;                                          | 是   | 需要订阅的key集合。                                          |
994| callback | Callback&lt;[lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable)&gt; | 是   | 回调函数。回调支持返回多个键值对,其中键为发生变更的订阅key,值为变更后的数据:支持number、string、boolean、bigint以及可序列化的object。 |
995
996**错误码:**
997
998以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
999
1000| 错误码ID | 错误信息                        |
1001| -------- | ------------------------------ |
1002| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
1003| 15500000 | Inner error.                   |
1004
1005**示例:**
1006
1007```ts
1008import { BusinessError } from '@kit.BasicServicesKit';
1009import { lang } from '@kit.ArkTS';
1010
1011let observer = (data: lang.ISendable) => {
1012  console.info(`observer : ${data}`);
1013};
1014let keys = ['name', 'age'];
1015preferences.on('dataChange', keys, observer);
1016preferences.putSync('name', 'xiaohong');
1017preferences.putSync('weight', 125);
1018preferences.flush().then(() => {
1019  console.info("Succeeded in flushing.");
1020}).catch((err: BusinessError) => {
1021  console.error(`Failed to flush. code: ${err.code}, message: ${err.message}`);
1022});
1023```
1024
1025### off('change')
1026
1027off(type: 'change', callback?: Callback&lt;string&gt;): void
1028
1029取消订阅数据变更。
1030
1031**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1032
1033**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
1034
1035**参数:**
1036
1037| 参数名   | 类型     | 必填 | 说明                                                         |
1038| -------- | -------- | ---- | ------------------------------------------------------------ |
1039| type     | string   | 是   | 事件类型,固定值'change',表示数据变更。                     |
1040| callback | Callback&lt;string&gt; | 否   | 需要取消的回调函数,不填写则全部取消。 |
1041
1042**错误码:**
1043
1044以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
1045
1046| 错误码ID | 错误信息                        |
1047| -------- | ------------------------------ |
1048| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
1049| 15500000 | Inner error.                   |
1050
1051**示例:**
1052
1053```ts
1054import { BusinessError } from '@kit.BasicServicesKit';
1055
1056let observer = (key: string) => {
1057  console.info("The key " + key + " changed.");
1058};
1059preferences.on('change', observer);
1060preferences.putSync('startup', 'auto');
1061preferences.flush().then(() => {
1062  console.info("Succeeded in flushing.");
1063  preferences.off('change', observer);
1064}).catch((err: BusinessError) => {
1065  console.error(`Failed to flush. code: ${err.code}, message: ${err.message}`);
1066});
1067```
1068
1069### off('multiProcessChange')
1070
1071off(type: 'multiProcessChange', callback?: Callback&lt;string&gt;): void
1072
1073取消订阅进程间数据变更。
1074
1075本接口提供给申请了[dataGroupId](#options)的应用进行使用,未申请的应用不推荐使用,多进程操作可能会损坏持久化文件,导致数据丢失。
1076
1077**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1078
1079**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
1080
1081**参数:**
1082
1083| 参数名   | 类型     | 必填 | 说明                                                         |
1084| -------- | -------- | ---- | ------------------------------------------------------------ |
1085| type     | string   | 是   | 事件类型,固定值'multiProcessChange',表示多进程间的数据变更。 |
1086| callback | Callback&lt;string&gt; | 否   | 需要取消的回调函数,不填写则全部取消。 |
1087
1088**错误码:**
1089
1090以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
1091
1092| 错误码ID | 错误信息                        |
1093| -------- | ------------------------------ |
1094| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
1095| 15500000 | Inner error.                   |
1096
1097**示例:**
1098
1099```ts
1100import { BusinessError } from '@kit.BasicServicesKit';
1101
1102let observer = (key: string) => {
1103  console.info("The key " + key + " changed.");
1104};
1105preferences.on('multiProcessChange', observer);
1106preferences.putSync('startup', 'auto');
1107preferences.flush().then(() => {
1108  console.info("Succeeded in flushing.");
1109  preferences.off('multiProcessChange', observer);
1110}).catch((err: BusinessError) => {
1111  console.error(`Failed to flush. code: ${err.code}, message: ${err.message}`);
1112});
1113```
1114### off('dataChange')
1115
1116off(type: 'dataChange', keys: Array&lt;string&gt;, callback?: Callback&lt;lang.ISendable&gt;): void
1117
1118取消精确订阅数据变更。
1119
1120**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1121
1122**系统能力:** SystemCapability.DistributedDataManager.Preferences.Core
1123
1124**参数:**
1125
1126| 参数名   | 类型                                                         | 必填 | 说明                                                         |
1127| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
1128| type     | string                                                       | 是   | 事件类型,固定值'dataChange',表示精确的数据变更。           |
1129| keys     | Array&lt;string&gt;                                          | 是   | 需要取消订阅的key集合,当keys为空数组时,表示取消订阅全部key;当keys为非空数组时,表示只取消订阅key集合中的key。 |
1130| callback | Callback&lt;[lang.ISendable](../../arkts-utils/arkts-sendable.md#isendable)&gt; | 否   | 需要取消的回调函数,若callback不填写,表示所有的callback都需要处理;若callback填写,表示只处理该callback。 |
1131
1132**错误码:**
1133
1134以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[用户首选项错误码](errorcode-preferences.md)。
1135
1136| 错误码ID | 错误信息                        |
1137| -------- | ------------------------------ |
1138| 401      | Parameter error. Possible causes:1. Mandatory parameters are left unspecified;2. Incorrect parameter types;3. Parameter verification failed.                       |
1139| 15500000 | Inner error.                   |
1140
1141**示例:**
1142
1143```ts
1144import { BusinessError } from '@kit.BasicServicesKit';
1145import { lang } from '@kit.ArkTS';
1146
1147let observer = (data: lang.ISendable) => {
1148  console.info(`observer : ${data}`);
1149};
1150let keys = ['name', 'age'];
1151preferences.on('dataChange', keys, observer);
1152preferences.putSync('name', 'xiaohong');
1153preferences.putSync('weight', 125);
1154preferences.flush().then(() => {
1155  console.info("Succeeded in flushing.");
1156  preferences.off('dataChange', keys, observer);
1157}).catch((err: BusinessError) => {
1158  console.error(`Failed to flush. code: ${err.code}, message: ${err.message}`);
1159});
1160```
1161