生活随笔
收集整理的這篇文章主要介紹了
HarmonyOS之数据管理·轻量级偏好数据库的应用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、簡介
① 基本概念
輕量級偏好數(shù)據(jù)庫主要提供輕量級 Key-Value 操作,支持本地應用存儲少量數(shù)據(jù),數(shù)據(jù)存儲在本地文件中,同時也加載在內(nèi)存中的,所以訪問速度更快,效率更高。輕量級偏好數(shù)據(jù)庫屬于非關系型數(shù)據(jù)庫,不宜存儲大量數(shù)據(jù),經(jīng)常用于操作鍵值對形式數(shù)據(jù)的場景。 Key-Value 數(shù)據(jù)庫:一種以鍵值對存儲數(shù)據(jù)的一種數(shù)據(jù)庫,類似 Java 中的 map,Key 是關鍵字,Value 是值。 非關系型數(shù)據(jù)庫:區(qū)別于關系數(shù)據(jù)庫,不保證遵循 ACID(Atomic、Consistency、Isolation 及 Durability)特性,不采用關系模型來組織數(shù)據(jù),數(shù)據(jù)之間無關系,擴展性好。 偏好數(shù)據(jù):用戶經(jīng)常訪問和使用的數(shù)據(jù)。
② 運作機制
本模塊提供偏好型數(shù)據(jù)庫的操作類,應用通過這些操作類完成數(shù)據(jù)庫操作。 借助 DatabaseHelper API,應用可以將指定文件的內(nèi)容加載到 Preferences 實例,每個文件最多有一個 Preferences 實例,系統(tǒng)會通過靜態(tài)容器將該實例存儲在內(nèi)存中,直到應用主動從內(nèi)存中移除該實例或者刪除該文件。 獲取到文件對應的 Preferences 實例后,應用可以借助 Preferences API,從 Preferences 實例中讀取數(shù)據(jù)或者將數(shù)據(jù)寫入 Preferences 實例,通過 flush 或者 flushSync 將 Preferences 實例持久化。 輕量級偏好數(shù)據(jù)庫運作機制如下圖所示:
③ 使用限制
Key 鍵為 String 類型,要求非空且大小不超過 80 個字符。 如果 Value 值為 String 類型,可以為空但是長度不超過 8192 個字符。 存儲的數(shù)據(jù)量應該是輕量級的,建議存儲的數(shù)據(jù)不超過一萬條,否則會在內(nèi)存方面產(chǎn)生較大的開銷。
④ 應用場景
輕量級偏好數(shù)據(jù)庫是輕量級存儲,主要用于保存應用的一些常用配置,并不適合存儲大量數(shù)據(jù)和頻繁改變數(shù)據(jù)的場景。用戶的數(shù)據(jù)保存在文件中,可以持久化的存儲在設備上。 需要注意的是用戶訪問的實例包含文件所有數(shù)據(jù),并一直加載在設備的內(nèi)存中,并通過輕量級偏好數(shù)據(jù)庫的 API 完成數(shù)據(jù)操作。
二、輕量級偏好數(shù)據(jù)庫 API
輕量級偏好數(shù)據(jù)庫向本地應用提供了操作偏好型數(shù)據(jù)庫的 API,支持本地應用讀寫少量數(shù)據(jù)及觀察數(shù)據(jù)變化。數(shù)據(jù)存儲形式為鍵值對,鍵的類型為字符串型,值的存儲數(shù)據(jù)類型包括整型、字符串型、布爾型、浮點型、長整型、字符串型 Set 集合。
① 創(chuàng)建數(shù)據(jù)庫
通過數(shù)據(jù)庫操作的輔助類可以獲取到要操作的 Preferences 實例,用于進行數(shù)據(jù)庫的操作。 輕量級偏好數(shù)據(jù)庫創(chuàng)建接口:
類名接口名描述 DatabaseHelper Preferences getPreferences(String name) 獲取文件對應的Preferences單實例,用于數(shù)據(jù)操作
② 查詢數(shù)據(jù)
通過調(diào)用 Get 系列的方法,可以查詢不同類型的數(shù)據(jù)。 輕量級偏好數(shù)據(jù)庫查詢接口如下表所示:
類名接口名描述 Preferences int getInt(String key, int defValue) 獲取鍵對應的int類型的值 Preferences float getFloat(String key, float defValue) 獲取鍵對應的float類型的值
③ 插入數(shù)據(jù)
通過 Put 系列的方法可以修改 Preferences 實例中的數(shù)據(jù),通過 flush 或者 flushSync 將 Preferences 實例持久化。 輕量級偏好數(shù)據(jù)庫插入接口如下表所示:
類名接口名描述 Preferences Preferences putInt(String key, int value) 設置Preferences實例中鍵對應的int類型的值 Preferences Preferences putString(String key, String value) 設置Preferences實例中鍵對應的String類型的值 Preferences void flush() 將Preferences實例異步寫入文件 Preferences boolean flushSync() 將Preferences實例同步寫入文件
④ 觀察數(shù)據(jù)變化
輕量級偏好數(shù)據(jù)庫還提供了一系列的接口變化回調(diào),用于觀察數(shù)據(jù)的變化。開發(fā)者可以通過重寫 onChange 方法來定義觀察者的行為。 輕量級偏好數(shù)據(jù)庫接口變化回調(diào)如下表所示:
類名接口名描述 Preferences void registerObserver(PreferencesObserver preferencesObserver) 注冊觀察者,用于觀察數(shù)據(jù)變化 Preferences void unRegisterObserver(PreferencesObserver preferencesObserver) 注銷觀察者 Preferences.PreferencesObserver void onChange(Preferences preferences, String key) 觀察者的回調(diào)方法,任意數(shù)據(jù)變化都會回調(diào)該方法
⑦ 刪除數(shù)據(jù)文件
通過調(diào)用以下兩種接口,可以刪除數(shù)據(jù)文件。 輕量級偏好數(shù)據(jù)庫刪除接口如下表所示:
類名接口名描述 DatabaseHelper boolean deletePreferences(String name) 刪除文件和文件對應的Preferences單實例 DatabaseHelper void removePreferencesFromCache(String name) 刪除文件對應的Preferences單實例
⑧ 移動數(shù)據(jù)庫文件
輕量級偏好數(shù)據(jù)庫移動接口如下所示:
類名接口名描述 DatabaseHelper boolean movePreferences(Context sourceContext, String sourceName, String targetName) 移動數(shù)據(jù)庫文件
三、輕量級偏好數(shù)據(jù)庫的使用開發(fā)流程
準備工作,導入對輕量級偏好數(shù)據(jù)庫 SDK 到開發(fā)環(huán)境。 獲取 Preferences 實例,讀取指定文件,將數(shù)據(jù)加載到 Preferences 實例,用于數(shù)據(jù)操作。
DatabaseHelper databaseHelper
= new DatabaseHelper ( context
) ; String fileName
= "name" ; Preferences preferences
= databaseHelper
. getPreferences ( fileName
) ;
從指定文件讀取數(shù)據(jù),首先獲取指定文件對應的 Preferences 實例,然后借助 Preferences API 讀取數(shù)據(jù)。java 接口讀取整型數(shù)據(jù):
int value
= preferences
. getInt ( "intKey" , 0 ) ;
將數(shù)據(jù)寫入指定文件,首先獲取指定文件對應的 Preferences 實例,然后借助 Preferences API 將數(shù)據(jù)寫入 Preferences 實例,通過 flush 或者 flushSync 將 Preferences 實例持久化:
preferences
. putInt ( "intKey" , 3 ) ; preferences
. putString ( "StringKey" , "String value" ) ; preferences
. flush ( ) ;
preferences
. putInt ( "intKey" , 3 ) ; preferences
. putString ( "StringKey" , "String value" ) ; preferences
. flushSync ( ) ;
注冊觀察者:開發(fā)者可以向 Preferences 實例注冊觀察者,觀察者對象需實現(xiàn) Preferences.PreferencesObserver 接口,flushSync() 或 flush() 執(zhí)行后,該 Preferences 實例注冊的所有觀察者的 onChange() 方法都會被回調(diào),不再需要觀察者時請注銷。
private class PreferencesChangeCounter implements Preferences. PreferencesObserver { final AtomicInteger notifyTimes
= new AtomicInteger ( 0 ) ; @Override public void onChange ( Preferences preferences
, String key
) { if ( "intKey" . equals ( key
) ) { notifyTimes
. incrementAndGet ( ) ; } } } PreferencesChangeCounter counter
= new PreferencesChangeCounter ( ) ; preferences
. registerObserver ( counter
) ; boolean result
= preferences
. flushSync ( ) ; int notifyTimes
= counter
. notifyTimes
. intValue ( ) ; preferences
. unRegisterObserver ( counter
) ;
移除 Preferences 實例:從內(nèi)存中移除指定文件對應的 Preferences 單實例。移除 Preferences 單實例時,應用不允許再使用該實例進行數(shù)據(jù)操作,否則會出現(xiàn)數(shù)據(jù)一致性問題。
DatabaseHelper databaseHelper
= new DatabaseHelper ( context
) ; String fileName
= "name" ; databaseHelper
. removePreferencesFromCache ( fileName
) ;
刪除指定文件:從內(nèi)存中移除指定文件對應的 Preferences 單實例,并刪除指定文件及其備份文件、損壞文件。刪除指定文件時,應用不允許再使用該實例進行數(shù)據(jù)操作,否則會出現(xiàn)數(shù)據(jù)一致性問題。
DatabaseHelper databaseHelper
= new DatabaseHelper ( context
) ; String fileName
= "name" ; boolean result
= databaseHelper
. deletePreferences ( fileName
) ;
移動指定文件:從源路徑移動文件到目標路徑。移動文件時,應用不允許再操作該文件數(shù)據(jù),否則會出現(xiàn)數(shù)據(jù)一致性問題。
四、完整示例
HarmonyOS之通過 Preferences 創(chuàng)建、刪除、更新和查詢應用程序偏好數(shù)據(jù)實現(xiàn)登錄頁面偏好數(shù)據(jù)存取及主頁面背景色偏好數(shù)據(jù)存取。
與50位技術專家面對面 20年技術見證,附贈技術全景圖
總結
以上是生活随笔 為你收集整理的HarmonyOS之数据管理·轻量级偏好数据库的应用 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔 推薦給好友。