数据持久化之轻量级Kv持久化(二),金三银四Android面试的一些感受

本文深入探讨了Android中轻量级Kv持久化库MMKV的使用,包括初始化、获取对象、写入和读取数据的流程。文章还分享了金三银四时期Android面试的相关体验和感悟。
摘要由CSDN通过智能技术生成

##2.1整体流程

初始化

在使用MMKV框架前,需调用以下方法进行初始化

MMKV.initialize(context);

这里的Java层主要是获取到保存文件的路径,传入Native层,这里默认的路径是APP的内部存储目录下的mmkv路径,这里不支持修改,如需修改,需将源码clone下来手动修改编译了。

public static String initialize(Context context) {

String rootDir = context.getFilesDir().getAbsolutePath() + “/mmkv”;

initialize(rootDir);

return rootDir;

}

到了Native层,通过Java_com_tencent_mmkv_MMKV_initialize方法跳转到MMKV::initializeMMKV方法里,启动了一个线程做初始化,然后检查内部路径是否存在,不存在则创建之。

void MMKV::initializeMMKV(const std::string &rootDir) {

static pthread_once_t once_control = PTHREAD_ONCE_INIT;

pthread_once(&once_control, initialize);

g_rootDir = rootDir;

char *path = strdup(g_rootDir.c_str());

mkPath(path);

free(path);

MMKVInfo(“root dir: %s”, g_rootDir.c_str());

}

获取MMKV对象

获取MMKV对象的方法有以下几个,最傻瓜式的defaultMMKV到最复杂的mmkvWithAshmemID方法,按需调用。

public MMKV defaultMMKV();

public MMKV defaultMMKV(int mode, String cryptKey);

public MMKV mmkvWithID(String mmapID);

public MMKV mmkvWithID(String mmapID, int mode);

public MMKV mmkvWithID(String mmapID, int mode, String cryptKey);

@Nullable

public MMKV mmkvWithAshmemID(Context context, String mmapID, int size, int mode, String cryptKey);

上面的方法,基本都会来到getMMKVWithID方法,然后跳转到MMKV::mmkvWithID里

MMKV *MMKV::mmkvWithID(const std::string &mmapID, int size, MMKVMode mode, string *cryptKey) {

if (mmapID.empty()) {

return nullptr;

}

SCOPEDLOCK(g_instanceLock);

auto itr = g_instanceDic->find(mmapID);

if (itr != g_instanceDic->end()) {

MMKV *kv = itr->second;

return kv;

}

auto kv = new MMKV(mmapID, size, mode, cryptKey);

(*g_instanceD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值