MMKV是Tencent开发的一种基于 mmap 的 key-value 存储方案,主要用于移动端存储。

MMKV(MMKV是Tencent开发的一种基于 mmap 的 key-value 存储方案,主要用于移动端存储。)是一种在Android平台上使用的数据存储方式。它基于mmap技术,提供了一种高效的、可扩展的、跨平台的键值存储方案。

使用MMKV前需要在Android项目的APP的gradle 里面添加

implementation 'com.tencent:mmkv:1.2.14'

下面是一个简单的示例,演示了如何在Android上使用MMKV保存数据:

import com.tencent.mmkv.MMKV;  
import com.tencent.mmkv.MMKVType;  
  
public class MainActivity extends AppCompatActivity {  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        // 初始化MMKV,选择存储路径,通常在应用的私有目录下  
        String mmkvPath = getApplicationContext().getFilesDir().getAbsolutePath() + "/mmkv";  
        MMKV.initialize(mmkvPath);  
  
        // 设置一个键值对  
        String key = "testKey";  
        String value = "Hello, MMKV!";  
        MMKV.putString(key, value, MMKVType.MMKV_SHORT_TERM);  
  
        // 从MMKV中获取一个值  
        String storedValue = MMKV.getString(key, null);  
        if (storedValue != null) {  
            System.out.println("Stored value: " + storedValue);  
        } else {  
            System.out.println("Value not found.");  
        }  
    }  
}

下面提供一个封装好的工具类

public class MMKVUtils<T>{
    private static MMKV kv;
    /**
     * 初始化
     * @param context  上下文对象
     */
    public static void init(Context context) {
        String rootDir = MMKV.initialize(context);
//        System.out.println("mmkv root: " + rootDir);
        kv = MMKV.defaultMMKV();
        // 根据业务区别存储, 附带一个自己的 ID
        MMKV kv2 = MMKV.mmkvWithID("MyID");
        // 多进程同步支持
        MMKV kv3 = MMKV.mmkvWithID("MyID", MMKV.MULTI_PROCESS_MODE);
    }

    /**
     * 指定保存位置初始化
     * @param dir   dir = getFilesDir().getAbsolutePath() + "/mmkv_2";
     */
    public static void init(String dir) {
//        String rootDir = MMKV.initialize(dir);


        kv = MMKV.defaultMMKV();
    }

    /**
     * Ashmem匿名内存
     * @param context 上下文
     */
    public static void initAshmem(Context context){
        kv = MMKV.mmkvWithAshmemID(context, "Ashmem", 1024,
                MMKV.MULTI_PROCESS_MODE, "553646546546");
    }

    /**
     * 迁移SP 到 MMKV
     */
    private void importSharedPreferences(Context context) {
        MMKV mmkv = MMKV.mmkvWithID("myData");
        SharedPreferences old_man = context.getSharedPreferences("myData", Context.MODE_PRIVATE);
        // 迁移旧数据
        mmkv.importFromSharedPreferences(old_man);
        // 清空旧数据
        old_man.edit().clear().commit();
    }
    /*

     *用途:增改sp的数组  name-自定义集合的名称
     */
    public static <T> Boolean setArray(Context mContext, List<T> list, String name) {
        MMKV kv = MMKV.defaultMMKV();
        if (list == null || list.size() == 0) { //清空
            kv.putInt(name + "size", 0);
            int size = kv.getInt(name + "size", 0);
            for (int i = 0; i < size; i++) {
                if (kv.getString(name + i, null) != null) {
                    kv.remove(name + i);
                }
            }
        } else {
            kv.putInt(name + "size", list.size());
            if (list.size() > 20) {
                list.remove(0);   //只保留后20条记录
            }
            for (int i = 0; i < list.size(); i++) {
                kv.remove(name + i);
                kv.remove(new Gson().toJson(list.get(i)));//删除重复数据 先删后加
                kv.putString(name + i, new Gson().toJson(list.get(i)));
            }
        }
        return kv.commit();
    }

    /*
     *用途:加载sp的数组 name-自定义集合的名称
     */
    public static <T> ArrayList<T> getArray(Context mContext, String name, Class<T> tClass) {
        MMKV kv = MMKV.defaultMMKV();
        ArrayList<T> list = new ArrayList<T>();
        int size = kv.getInt(name + "size", 0);
        for (int i = 0; i < size; i++) {
            if (kv.getString(name + i, null) != null) {
                try {
                    list.add((T) new Gson().fromJson(kv.getString(name + i, null), tClass));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        }
        return list;
    }


    public static void putBoolean(String key, boolean value) {
        kv.encode(key, value);
    }

    public static Boolean getBoolean(String key) {
        return kv.decodeBool(key, false);
    }

    public static Boolean getBoolean(String key, boolean defValue) {
        return kv.decodeBool(key, defValue);
    }

    public static void putInteger(String key, int value) {
        kv.encode(key, value);
    }

    public static int getInteger(String key) {
        return kv.decodeInt(key, 0);
    }

    public static int getInteger(String key, int defValue) {
        return kv.decodeInt(key, defValue);
    }

    public static void putString(String key, String value) {
        kv.encode(key, value);
    }

    public static String getString(String key) {
        return kv.decodeString(key, "");
    }

    public static String getString(String key, String defaultValue) {
        return kv.decodeString(key, defaultValue);
    }

    /**
     * 移除数据Key
     * @param key  数据Key
     */
    public static void removeKey(String key) {
        // 删除数据
        kv.removeValueForKey(key);
//        mmkv.removeValueForKey("String")
//        mmkv.removeValuesForKeys(arrayOf("int","bool"))
//        mmkv.containsKey("String")
    }



}

这样可以直接调用工具类处理

MMKVUtils.putString("name","这里是名称");
MMKVUtils.putInteger("id",1111);

String name=  MMKVUtils.getString("name");


int id=MMKVUtils.getInteger("id",-1);

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YMR_DD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值