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