Android documentation没有说明任何关于 MODE_MULTI_PROCESS 是否安全(安全方面)的信息。
那么,它安全吗?有理由不使用它吗?
最佳答案
该标志与安全无关,与访问并发有关。它效率较低,但尽量避免由多个进程(来自同一应用程序)访问底层文件引起的问题。如果您不编写多进程应用程序,则不需要它。如果这样做,文档建议使用其他进程间通信。文档出于性能原因而不是安全性原因建议不要这样做。
因此,MODE_PRIVATE
/MODE_WORLD_READABLE
/MODE_WORLD_WRITEABLE
和 MODE_MULTI_PROCESS
是正交标志。如果您使用以下方式打开 SharedPreferences
:
MODE_PRIVATE
--> 安全MODE_WORLD_READABLE
--> 不安全MODE_PRIVATE | MODE_MULTI_PROCESS
--> 安全MODE_WORLD_READABLE | MODE_MULTI_PROCESS
--> 不安全
并且由于 MODE_PRIVATE
的值为 0:MODE_MULTI_PROCESS
等同于 MODE_PRIVATE | MODE_MULTI_PROCESS
(即安全)
实际上 MODE_MULTI_PROCESS
源代码中唯一的用途是在 ContextImpl
类中:
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
SharedPreferencesImpl sp;
synchronized (sSharedPrefs) {
sp = sSharedPrefs.get(name);
if (sp == null) {
File prefsFile = getSharedPrefsFile(name);
sp = new SharedPreferencesImpl(prefsFile, mode);
sSharedPrefs.put(name, sp);
return sp;
}
}
if ((mode & Context.MODE_MULTI_PROCESS) != 0 ||
getApplicationInfo().targetSdkVersion < android.os.Build.VERSION_CODES.HONEYCOMB) {
// If somebody else (some other process) changed the prefs
// file behind our back, we reload it. This has been the
// historical (if undocumented) behavior.
sp.startReloadIfChangedUnexpectedly();
}
return sp;
}
关于android - SharedPreferences 的 MODE_MULTI_PROCESS 是否不如 MODE_PRIVATE 安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017518/