Android documentation没有说明任何关于MODE_MULTI_PROCESS的安全性(安全性)是否安全。
那么,这样安全吗?有没有理由不使用它?
答案 0 :(得分:9)
此标志与安全性无关,但与访问可靠性无关。效率较低但尝试避免由访问底层文件的多个进程(来自同一应用程序)引起的问题。如果您不编写多进程应用程序,则不需要它。如果这样做,文档建议使用其他进程间通信。出于性能原因而不是安全性,文档会提出建议。
一方面是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;
}
答案 1 :(得分:0)
我想这不安全。
该文档还指出:“这是Gingerbread(Android 2.3)之前和之前的遗留(但未记录)行为,并且在定位此类版本时会隐含此标志。对于针对大于Android 2.3的SDK版本的应用程序,此标志必须是如果需要,明确设置。“这似乎是一个他们不鼓励使用的旧功能。
答案 2 :(得分:0)
有一种机制可以阻止外部进程的访问:SharedPreferences是app-private。 Android安全模型阻止其他应用程序访问该文件,即使他们可以找出其名称(相信我并不容易)。