Android documentation沒有說明任何有關MODE_MULTI_PROCESS是否安全(安全)的信息。SharedPreferences的MODE_MULTI_PROCESS比MODE_PRIVATE更安全
那麼,安全嗎?有沒有理由不使用它?
Android documentation沒有說明任何有關MODE_MULTI_PROCESS是否安全(安全)的信息。SharedPreferences的MODE_MULTI_PROCESS比MODE_PRIVATE更安全
那麼,安全嗎?有沒有理由不使用它?
此標誌與安全性無關,但要訪問協議。效率較低,但要儘量避免由多個進程(來自同一應用程序)訪問底層文件引起的問題。如果你不寫一個多進程應用程序,你不需要它。如果這樣做,文檔建議使用其他進程間通信。該文檔建議反對它出於性能的原因,而不是安全。
所以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;
}
有一個機制,以防止外國進程的訪問:SharedPreferences爲應用程序和私營部門。 Android安全模型可以阻止其他應用程序訪問該文件,即使他們能夠找出其名稱(相信我並不輕鬆)。
所以我應該感到安全使用MODE_MULTI_PROCESS保存敏感數據? Android的文檔中是否有對這種機制的引用? – dors
I同意這是文檔說的,但沒有提到安全性的快速並不意味着它不是問題 – dors
添加了一些解釋 – bwt
很好的解釋,謝謝 – dors