鴻蒙用戶首選項(xiàng)數(shù)據(jù)持久化
踏入鴻蒙世界的敲門磚,標(biāo)志著您在技術(shù)征途上的全新起點(diǎn),提升就業(yè)競(jìng)爭(zhēng)力,獲得行業(yè)認(rèn)可,點(diǎn)亮職業(yè)成長(zhǎng)先機(jī),快人一步搶占未來應(yīng)用開發(fā)賽道!https://developer.huawei.com/consumer/cn/training/dev-cert-detail/101666948302721398?ha_source=hmosclass-infoq&ha_sourceId=89000233
用戶首選項(xiàng)為應(yīng)用提供Key-Value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久化輕量級(jí)數(shù)據(jù),并對(duì)其修改和查詢。當(dāng)用戶希望有一個(gè)全局唯一存儲(chǔ)的地方,可以采用用戶首選項(xiàng)來進(jìn)行存儲(chǔ)。Preferences會(huì)將該數(shù)據(jù)緩存在內(nèi)存中,當(dāng)用戶讀取的時(shí)候,能夠快速從內(nèi)存中獲取數(shù)據(jù),當(dāng)需要持久化時(shí)可以使用flush接口將內(nèi)存中的數(shù)據(jù)寫入持久化文件中。Preferences會(huì)隨著存放的數(shù)據(jù)量越多而導(dǎo)致應(yīng)用占用的內(nèi)存越大,因此,Preferences不適合存放過多的數(shù)據(jù),也不支持通過配置加密,適用的場(chǎng)景一般為應(yīng)用保存用戶的個(gè)性化設(shè)置(字體大小,是否開啟夜間模式)等。
動(dòng)作機(jī)制
如圖所示,用戶程序通過ArkTS接口調(diào)用用戶首選項(xiàng)讀寫對(duì)應(yīng)的數(shù)據(jù)文件。開發(fā)者可以將用戶首選項(xiàng)持久化文件的內(nèi)容加載到Preferences實(shí)例,每個(gè)文件唯一對(duì)應(yīng)到一個(gè)Preferences實(shí)例,系統(tǒng)會(huì)通過靜態(tài)容器將該實(shí)例存儲(chǔ)在內(nèi)存中,直到主動(dòng)從內(nèi)存中移除該實(shí)例或者刪除該文件。

約束限制
·首選項(xiàng)無法保證進(jìn)程并發(fā)安全,會(huì)有文件損壞和數(shù)據(jù)丟失的風(fēng)險(xiǎn),不支持在多進(jìn)程場(chǎng)景下使用。
·Key鍵為string類型,要求非空且長(zhǎng)度不超過1024個(gè)字節(jié)。
·如果Value值為string類型,請(qǐng)使用UTF-8編碼格式,可以為空,不為空時(shí)長(zhǎng)度不超過16MB。
·當(dāng)存儲(chǔ)的數(shù)據(jù)中包含非UTF-8格式的字符串時(shí),請(qǐng)使用Uint8Array類型存儲(chǔ),否則會(huì)造成持久化文件出現(xiàn)格式錯(cuò)誤造成文件損壞。
·當(dāng)調(diào)用removePreferencesFromCache或者deletePreferences后,訂閱的數(shù)據(jù)變更會(huì)主動(dòng)取消訂閱,重新getPreferences后需要重新訂閱數(shù)據(jù)變更。
·不允許deletePreferences與其他接口多線程、多進(jìn)程并發(fā)調(diào)用,否則會(huì)發(fā)生不可預(yù)期行為。
·內(nèi)存會(huì)隨著存儲(chǔ)數(shù)據(jù)量的增大而增大,所以存儲(chǔ)的數(shù)據(jù)量應(yīng)該是輕量級(jí)的,建議存儲(chǔ)的數(shù)據(jù)不超過50MB,當(dāng)存儲(chǔ)的數(shù)據(jù)較大時(shí),在使用同步接口創(chuàng)建Preferences對(duì)象和持久化數(shù)據(jù)時(shí)會(huì)變成耗時(shí)操作,不建議在主線程中使用,否則可能出現(xiàn)appfreeze問題。
開發(fā)步驟
1. 導(dǎo)入@kit.ArkData模塊
![]()
2. 獲取Preferences實(shí)例

3. 寫入數(shù)據(jù)
使用putSync()方法保存數(shù)據(jù)到緩存的Preferences實(shí)例中。在寫入數(shù)據(jù)后,如有需要,可使用flush()方法將Preferences實(shí)例的數(shù)據(jù)存儲(chǔ)到持久化文件。

4. 讀取數(shù)據(jù)
使用getSync()方法獲取數(shù)據(jù),即指定鍵對(duì)應(yīng)的值。如果值為null或者非默認(rèn)值類型,則返回默認(rèn)數(shù)據(jù)。

5. 刪除數(shù)據(jù)
使用deleteSync()方法刪除指定鍵值對(duì)。
![]()
6. 數(shù)據(jù)持久化
應(yīng)用存入數(shù)據(jù)到Preferences實(shí)例后,可以使用flush()方法實(shí)現(xiàn)數(shù)據(jù)持久化。

7. 刪除指定文件
使用deletePreferences()方法從內(nèi)存中移除指定文件對(duì)應(yīng)的Preferences實(shí)例,包括內(nèi)存中的數(shù)據(jù)。若該P(yáng)reference存在對(duì)應(yīng)的持久化文件,則同時(shí)刪除該持久化文件,包括指定文件及其備份文件、損壞文件。

(轉(zhuǎn)載自51CTO,作者:龍兒箏)

浙公網(wǎng)安備 33010602011771號(hào)