回答:
getDefaultSharedPreferences
「com.example.something_preferences」のようなデフォルト名を使用しますが、名前getSharedPreferences
が必要です。
getDefaultSharedPreferences
実際にはContext.getSharedPreferences
以下を使用します(以下はAndroidソースから直接):
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
private static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
getDefaultSharedPreferencesName
名前はバックアップ/復元フレームワークに必要なので、悪いことは公開されていません。
違いの基本的なポイントを見てみましょう:
getDefaultSharedPreferences()
デフォルトの設定ファイル名を使用します。このデフォルトはアプリケーションごとに設定されるため、次の例のように、同じアプリコンテキスト内のすべてのアクティビティが簡単にアクセスできます。
SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
if (spref.contains("email")) {
String sEmailAddr = spref.getString("email", "");
}
設定は通常に保存され/data/data/com.package.name/shared_prefs/com.package.name_preferences.xml
ます。
代替方法- getSharedPreferences(name,mode)
特定の設定(ファイル)名と操作モード(プライベート、ワールド読み取り可能など)を示す必要があります。
copoliiで述べたように、結果は同じですが、最初のオプションはより単純であり、2番目のオプションで提供される複数の設定ファイルに分割する柔軟性に欠けていますgetSharedPreferences()
。MODE_WORLD_READABLE操作インジケーターを使用してアプリ間で設定を共有することもgetSharedPreferences()
、を使用して可能ですが、ほとんど使用されません。
IMHO getDefaultSharedPreferences()
は、アプリ内の異なるモジュールが異なる設定ファイルを使用することを望まない限り、タイプミスや混乱が生じやすい複数の設定ファイル名の混乱に陥ることなく安全に使用できます。通常、これは必要ありません。アプリが多くのパラメーターを保存する必要がある場合は、データ保護も向上するため、おそらく外部データベースを使用する方が良いでしょう。
誰かがgetDefaultSharedPreferences()ではなくgetSharedPreferences()を定期的に使用する正当な理由を知っている場合は、ここにコメントしてお知らせください。
私はこの投稿が少し古いことを知っていますが、v7サポートライブラリの24.0.1以降、次を使用してどこからでもコンテキストによってデフォルトの設定を取得できます
// context might be an application context, activity, ..
// so if you want to get your apps defaults, pass an activity context
PreferenceManager.getDefaultSharedPreferences(context)
https://developer.android.com/reference/android/support/v7/preference/PreferenceManager#getdefaultsharedpreferencesを参照してください
3番目の関数もあります。
public SharedPreferences Activity.getPreferences(int mode) {}
私の質問と回答をここで参照してください:Androidの共有設定で混乱-どの機能を使用しますか?
getSharedPreferences()とgetDefaultSharedPreferences()の両方を使用して、アプリケーションレベルの設定にアクセスします。getDefaultSharedPreferences()を使用して、Androidの全体的な設定フレームワークに従って機能する共有設定を取得します。getDefaultSharedPreferences()は、デフォルトでPreferenceActivityと連携するSharedPreferencesオブジェクトを提供するため、使用するのが適切です。
Context
どちらかを呼び出すにはインスタンスが必要なので、それは本当に問題ではありません。