MMKV 是基於 mmap 內存映射的 key-value 組件,底層序列化/反序列化使用 protobuf 實現,性能高,穩定性強。從 2015 年中至今,在 iOS 微信上使用已有近 3 年,其性能和穩定性通過了時間的驗證。近期也已移植到 Android 平臺,一併開源。安全
推薦使用 Maven:bash
dependencies {
implementation 'com.tencent:mmkv:1.0.10'
// replace "1.0.10" with any available version
}
複製代碼
在Application處初始化 MMKV.initialize(this);微信
默認使用單進程模式,如需切到多進程模式可以使用MULTI_PROCESS_MODE,若是要使用多進程且用匿名內存,則使用MMKV.mmkvWithAshmemID(Context context, String mmapID, int size, int mode, String cryptKey)數據結構
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");
複製代碼
A1:將數據存放於系統的一塊特殊內存區域,該內存區域會隨着APP的關閉而銷燬,可用於存放一些臨時文件。函數
A2:用於分配出一塊內存,在MMKV裏,用這個函數將文件映射到內存中,其中flags參數使用了MAP_SHARED,能夠將映射出來的內存作的任何修改會經過系統反饋迴文件中,也就是隻需管理好這塊內存,文件的讀寫交由系統完成,避免了奔潰致使數據丟失的狀況。性能
A3:由於一切操做都直接在內存操做,而且數據結構都是使用Protobuf去實現,該結構採用二進制存取數據,存取的時候,直接跳到指定位置,讀取指定大小,因此至關快。測試
A4:進程A經過mmap分配的內存A,進程B經過mmap分配的內存B,B作了修改,A在每次讀取的時候,都須要從新讀一次文件的狀態,經過文件的大小和校驗碼,來得知文件是否作過修改,如已修改,A須要重組內存,獲取到了B修改後的數據,從而實現跨進程,其中的讀寫安全操做,都須要加上文件鎖來實現。this
說的可能有不對的地方,望指出!spa