餓了麼開源專案:便捷高效的Android資料持久化儲存框架
版權所有。所有權利保留。
歡迎轉載,轉載時請註明出處:
http://blog.csdn.net/xiaofei_it/article/details/51436972
Android應用開發時經常要對許多資料進行持久化儲存,便於以後訪問。
對於int、double、boolean這些基本資料,可以使用SharedPreference。對於一些物件,往SharedPreference裡儲存的時候需要使用序列化技術。如果物件很大,或者碰到列表、陣列等結構,就必須使用資料庫。而使用資料庫比較麻煩,成本比較大。
這裡介紹一個新的儲存框架,使用非常簡單,可以儲存任意物件,物件不需要實現序列化介面。上層使用快取機制,讀取資料非常高效。
專案地址:
https://github.com/Xiaofei-it/AndroidDataStorage
特色
1、實現安卓裝置上的物件持久化,能儲存和讀取任何物件。
2、讀寫速度比SharedPreference等基於檔案的儲存方案高。
3、大量物件讀寫操作的場景下,使用此框架能極大提升效能,比通常的資料庫方案高效。
4、上層使用快取,讀寫資料快速高效。底層使用資料庫,在程式被終止並重新啟動後能快速恢復物件。
5、介面簡單易用,使用者無需瞭解安卓儲存機制。
6、經過嚴格測試,有良好的容錯能力和穩定性。
Gradle
dependencies {
compile 'xiaofei.library:android-data-storage:1.0.2'
}
Maven
<dependency>
<groupId>xiaofei.library</groupId>
<artifactId>android-data-storage</artifactId>
<version>1.0.2</version>
<type>pom</type>
</dependency>
用法
1. 獲取介面
獲取IDataStorage介面,目前只支援資料庫型別。
IDataStorage dataStorage = DataStorageFactory.getInstance(
getApplicationContext(),
DataStorageFactory.TYPE_DATABASE);
2、儲存原理
儲存資料的時候,索引是類id和物件id。如果這兩個id相同,則老資料被覆蓋。讀取資料的時候也需要提供這兩個id。
3、類id
給需要儲存的類加上ClassId註解,裡面寫上類id。需要保證不同的類有不同的id。
如果不同版本的程式碼在混淆後,能保證該類的類名不變,那就不需要加註解。框架將類的包名和類名作為類id。
4、物件id
如果類的某個欄位就是物件id,那在那個欄位之前加上ObjectId註解。該欄位必須是String。框架將這個欄位作為物件id。
如果沒有這個欄位,那讀寫資料的時候需要提供物件id作為函式的引數。
以下給出一個例子:
@ClassId("Order")
public class Order {
@ObjectId
private String mId;
private int mState;
public int getState() {
return mState;
}
...
...
}
5、儲存資料
儲存物件order:
dataStorage.saveOrUpdate(order);
儲存一個order列表:
List<Order> list = new ArrayList<Order>();
...
dataStorage.saveOrUpdate(list);
如果Order內部沒有物件id的欄位:
dataStorage.saveOrUpdate(order, "1001");
List<Order> list = new ArrayList<Order>();
List<String> ids = new ArrayList<ids>();
...
//list和ids一一對應
dataStorage.saveOrUpdate(list, ids);
6、讀取資料
讀取一個資料
Order order = dataStorage.load(Order.class, "1001");
讀取所有Order
List<Order> list = dataStorage.loadAll(Order.class);
讀取mState為10的所有Order
List<Order> list = dataStorage.load(Order.class, new Condition() {
@Override
public boolean satisfy(Order o) {
return o.getState() == 10;
}
});
讀取一批id的Order
List<String> ids = new ArrayList<String>();
...
List<Order> list = dataStorage.load(Order.class, ids);
以上函式都有一個引數Comparator供選擇,提供Comparator後,獲取的List是經過排序的。
List<Order> list = dataStorage.loadAll(Order.class, comparator);
我還做了一個工具類,可以方便地自動生成Comparator。詳見這裡。
7、刪除資料
刪除一個資料
dataStorage.delete(order);
如果Order類裡沒有提供物件id,那麼
dataStorage.delete(Order.class, "1001");
刪除所有Order
dataStorage.deleteAll(Order.class);
刪除一批Order
List<Order> list = new ArrayList<Order>();
dataStorage.delete(list);
如果Order類裡沒有提供物件id,那麼
List<String> ids = new ArrayList<String>();
...
dataStorage.delete(Order.class, ids);
刪除mState為10的Order
dataStorage.delete(Order.class, new Condition() {
@Override
public boolean satisfy(Order o) {
return o.getState() == 10;
}
});
8、其他API
還有許多API,具體請看xiaofei.library.datastorage.IDataStorage。
相關文章
- 餓了麼開源專案Hermes:新穎巧妙易用的Android程式間通訊IPC框架Android框架
- scrapy框架持久化儲存框架持久化
- Flutter持久化儲存之資料庫儲存Flutter持久化資料庫
- 餓了麼開源專案:Java Comparator生成器Java
- iOS資料持久化儲存-CoreDataiOS持久化
- Flutter持久化儲存之檔案儲存Flutter持久化
- iOS資料持久化儲存-NSKeyedArchiveriOS持久化Hive
- Docker的持久化儲存和資料共享(四)Docker持久化
- 1.05 docker的持久化儲存和資料共享Docker持久化
- Kubernetes 持久化資料儲存 StorageClass持久化
- Room-資料持久化儲存(入門)OOM持久化
- ui餓了麼框架UI框架
- 開源的NAS軟體專案儲存
- android開源專案和框架Android框架
- 非結構化資料怎麼存?——開源物件儲存方案介紹物件
- ios持久化儲存iOS持久化
- Redis持久化儲存Redis持久化
- Android中的資料儲存之檔案儲存Android
- 8 個用於 Kubernetes 持久化儲存的 CNCF 專案持久化
- 去中心化大資料儲存的開源方案:Storj中心化大資料
- React通過redux-persist持久化資料儲存ReactRedux持久化
- android開源專案和框架(轉)Android框架
- 使用Room持久庫儲存資料OOM
- Docker最全教程——資料庫容器化之持久儲存資料(十一)Docker資料庫
- 瞭解 Android 應用的檔案儲存目錄,掌握持久化資料的正確姿勢Android持久化
- 華為雲學院乾貨:物件儲存服務:便捷管理儲存資源物件
- Vue仿餓了麼app專案總結VueAPP
- Vue2.x開發餓了麼專案(header部分)VueHeader
- 開源專案之Android Afinal框架Android框架
- 地圖APP開源專案分享,免費影像資料API開發更便捷!地圖APPAPI
- Flutter持久化儲存之key-value儲存Flutter持久化
- Redis持久化儲存——>RDB & AOFRedis持久化
- Redis 持久化儲存詳解Redis持久化
- 歡迎使用開源持久化框架 MyBatis Enhance持久化框架MyBatis
- 【Android】開源專案UniversalImageLoader及開源框架ImageLoaderAndroid框架
- 慕課網 餓了麼 vue2.0 專案Vue
- k8s-資料持久化儲存卷,nfs,pv/pvcK8S持久化NFS
- HTML5 Canvas 資料持久化儲存之屬性列表HTMLCanvas持久化