圖片來源網(wǎng)絡,入侵必刪
在Android
項目開發(fā)中浴捆,我們可能會遇到使用MMKV
做緩存的項目蒜田。這里分享一下關于MMKV
的知識,希望能幫助到看文章的小伙伴选泻。
MMKV的原理
- 內(nèi)存準備冲粤,通過 mmap 內(nèi)存映射文件,提供一段可供隨時寫入的內(nèi)存塊页眯,App 只管往里面寫數(shù)據(jù)色解,由操作系統(tǒng)負責將內(nèi)存回寫到文件,不必擔心 crash 導致數(shù)據(jù)丟失餐茵。
- 數(shù)據(jù)組織科阎,數(shù)據(jù)序列化方面我們選用 protobuf 協(xié)議,pb 在性能和空間占用上都有不錯的表現(xiàn)忿族。
- 寫入優(yōu)化锣笨,考慮到主要使用場景是頻繁地進行寫入更新,我們需要有增量更新的能力道批。我們考慮將增量 kv 對象序列化后错英,append 到內(nèi)存末尾。
- 空間增長隆豹,使用 append 實現(xiàn)增量更新帶來了一個新的問題椭岩,就是不斷 append 的話,文件大小會增長得不可控璃赡。我們需要在性能和空間上做個折中判哥。
Android版本特點
- 多進程訪問
- 匿名緩存
- 數(shù)據(jù)加密
引入項目
dependencies {
implementation 'com.tencent:mmkv:1.2.14'
}
在我發(fā)布博客的時候,開源庫版本是1.2.14
碉考。開源庫最新版本請看wiki
簡單的使用
初始化塌计,在Application
當中:
public void onCreate() {
super.onCreate();
MMKV.initialize(this);
}
MMKV
有提供全局實例,我們可以直接調(diào)用:
MMKV kv = MMKV.defaultMMKV();
kv.encode("bool", true);
boolean bValue = kv.decodeBool("bool");
kv.encode("int", Integer.MIN_VALUE);
int iValue = kv.decodeInt("int");
kv.encode("string", "Hello from mmkv");
String str = kv.decodeString("string");
上面的示例代碼來自官方的wiki侯谁,在實際的應用開發(fā)當中锌仅,我個人建議封裝成工具類來具體使用。