在Android开发中,大家对MMKV的使用都比较熟悉,但是大家对它的理解大多都停留在“SharedPrefered的替代品”这个层面,作为App内本地存储持久化的框架。那么有没有想过,在多进程使用中,它是否存在一些问题? 这个也是面试官常问的问题,通过这个问题就可以快速看出你是否了解MMKV,今天我们就来好好讨论一下这个问题
首先MMKV在性能上要远远高于SP,这也是各大公司使用的原因,以下是官方文档及数据对比: MMKV官方文档。
APP中的跨进程使用
当一个app存在多进程通信的需要时,可以直接通过MMKV
来实现数据跨进程读写。
初始化MMKV
在每个进程的Application类中调用MMKV.initialize()
方法来初始化MMKV。确保每个进程都有自己独立的MMKV实例。
CRUD
在每个进程中创建MMKV实例时,使用相同的名称来标识MMKV实例,这样不同进程中的MMKV实例可以互相访问存储的数据。可以通过MMKV.mmkvWithID()
方法来创建或获取MMKV实例。
String mmkvID = "my_mmkv"; // 指定MMKV实例的名称
MMKV mmkv = MMKV.mmkvWithID(mmkvID);
这样就可以在不同进程中MMKV实例来进行数据的读写操作。使用MMKV的encodeXXX()
方法存储数据,使用decodeXXX()
方法读取数据。
Lotus插件化使用
插件化方案中,插件和宿主处于不同APP中,使用MMKV时需要考虑到Android文件的读写权限问题。
初始化MMKV
不仅仅需要确保每个进程都调用到MMKV.initialize(ctx,rootDir)
,还需要确定指定的rootDir
宿主和插件都能访问。
CRUD
在每个进程中创建MMKV实例时,除了使用相同的名称来标识MMKV实例和指定的MMKV.
MULTI_PROCESS_MODE
,还需要确定指定的rootPath
宿主和插件都能访问。
PROCESS MODE
如果设置MMKV.
SINGLE_PROCESS_MODE
,在Lotus 插件 化中使用。当宿主和插件同时操作MMKV的数据时,会出现前一个获取到对应的锁之后,后一个获取的就无法再进行操作。
以获取int数据为例
- java端调用
- c++端调用