編輯:關於Android編程
Android應用開發時經常要對許多數據進行持久化存儲,便於以後訪問。
對於int、double、boolean這些基本數據,可以使用SharedPreference。對於一些對象,往SharedPreference裡存儲的時候需要使用序列化技術。如果對象很大,或者碰到列表、數組等結構,就必須使用數據庫。而使用數據庫比較麻煩,成本比較大。
這裡介紹一個新的存儲框架,使用非常簡單,可以存儲任意對象,對象不需要實現序列化接口。上層使用緩存機制,讀取數據非常高效。
項目地址:
https://github.com/Xiaofei-it/AndroidDataStorage
1、實現安卓設備上的對象持久化,能存儲和讀取任何對象。
2、讀寫速度比SharedPreference等基於文件的存儲方案高。
3、大量對象讀寫操作的場景下,使用此框架能極大提升性能,比通常的數據庫方案高效。
4、上層使用緩存,讀寫數據快速高效。底層使用數據庫,在進程被終止並重新啟動後能快速恢復對象。
5、接口簡單易用,用戶無需了解安卓存儲機制。
6、經過嚴格測試,有良好的容錯能力和穩定性。
dependencies {
compile 'xiaofei.library:android-data-storage:1.0.2'
}
xiaofei.library
android-data-storage
1.0.2
pom
獲取IDataStorage接口,目前只支持數據庫類型。
IDataStorage dataStorage = DataStorageFactory.getInstance(
getApplicationContext(),
DataStorageFactory.TYPE_DATABASE);
存儲數據的時候,索引是類id和對象id。如果這兩個id相同,則老數據被覆蓋。讀取數據的時候也需要提供這兩個id。
給需要存儲的類加上ClassId注解,裡面寫上類id。需要保證不同的類有不同的id。
如果不同版本的代碼在混淆後,能保證該類的類名不變,那就不需要加注解。框架將類的包名和類名作為類id。
如果類的某個字段就是對象id,那在那個字段之前加上ObjectId注解。該字段必須是String。框架將這個字段作為對象id。
如果沒有這個字段,那讀寫數據的時候需要提供對象id作為函數的參數。
以下給出一個例子:
@ClassId("Order")
public class Order {
@ObjectId
private String mId;
private int mState;
public int getState() {
return mState;
}
...
...
}
存儲對象order:
dataStorage.saveOrUpdate(order);
存儲一個order列表:
List list = new ArrayList();
...
dataStorage.saveOrUpdate(list);
如果Order內部沒有對象id的字段:
dataStorage.saveOrUpdate(order, "1001");
List list = new ArrayList();
List ids = new ArrayList();
...
//list和ids一一對應
dataStorage.saveOrUpdate(list, ids);
讀取一個數據
Order order = dataStorage.load(Order.class, "1001");
讀取所有Order
List list = dataStorage.loadAll(Order.class);
讀取mState為10的所有Order
List list = dataStorage.load(Order.class, new Condition() {
@Override
public boolean satisfy(Order o) {
return o.getState() == 10;
}
});
讀取一批id的Order
List ids = new ArrayList();
...
List list = dataStorage.load(Order.class, ids);
以上函數都有一個參數Comparator供選擇,提供Comparator後,獲取的List是經過排序的。
List list = dataStorage.loadAll(Order.class, comparator);
刪除一個數據
dataStorage.delete(order);
如果Order類裡沒有提供對象id,那麼
dataStorage.delete(Order.class, "1001");
刪除所有Order
dataStorage.deleteAll(Order.class);
刪除一批Order
List list = new ArrayList();
dataStorage.delete(list);
如果Order類裡沒有提供對象id,那麼
List ids = new ArrayList();
...
dataStorage.delete(Order.class, ids);
刪除mState為10的Order
dataStorage.delete(Order.class, new Condition() {
@Override
public boolean satisfy(Order o) {
return o.getState() == 10;
}
});
我仍然從實際工作中出發!最近需要在照相機裡面添加聲控拍照功能(語音拍照),在設置當中需要實現如下圖的效果: 其設置的語音拍照菜單功能描述如下: (1)當點擊語音拍照菜單
類加載流程在周志明寫的<<深入理解java虛擬機的一本書中>>已經詳細地介紹java加載類過程,在HotSpot虛擬機實現中是通過雙親委派機制來加
在Android設備上面,快速高效的顯示圖片是極為重要的。過去的幾年裡,我們在如何高效的存儲圖像這方面遇到了很多問題。圖片太大,但是手機的內存卻很小。每一個像素的R、G、
本文講介紹android在3.0之後推出的一種新的動畫機制,屬性動畫,對動畫不了解的同學,可以先去看看繪圖篇——android動畫基礎這篇文章。好