在使用SharedPreference 时,有如下一些模式:
确保一个文件只有一个进程在读写操作
MODE_PRIVATE
私有模式,这是最常见的模式,一般情况下都使用该模式。
MODE_WORLD_READABLE
,
MODE_WORLD_WRITEABLE
,文件开放读写权限,不安全,已经被废弃了,google建议使用
FileProvider
共享文件。
MODE_MULTI_PROCESS
,跨进程模式,如果项目有多个进程使用同一个Preference,需要使用该模式,但是也已经废弃了,Android不保证该模式总是能正确的工作,建议使用
ContentProvider
替代。结合前面的
MODE_WORLD_READABLE
标志,可以发现,Google认为多个进程读同一个文件都是不安全的,不建议这么做,推荐使用
ContentProivder
来处理多进程间的文件共享,
FileProvider
也继承于
ContentProvider
。实际上就是一条原则:
确保一个文件只有一个进程在读写操作
为什么不建议使用MODE_MULTI_PROCESS
原因并不复杂,我们可以从android源码看一下,通过方法context.getSharedPreferences
获取到的类实质上是SharedPreferencesImpl
。该类就是一个简单的二级缓存,在启动时会将文件里的数据全部都加载到内存里,
private void startLoadFromDisk() {
synchronized (this) {
mLoaded = false;
}
new Thread("SharedPreferencesImpl-load") {