web-dev-qa-db-ja.com

getDefaultSharedPreferences()とgetPreferences()の違いは何ですか?

現在、「Androidアプリの開発」Udacityコースを受講しています。 「レッスン3:新しいアクティビティとインテント> SharedPreferencesの使用」セグメントで、インストラクターは、Android開発者サイトを調べて、SharedPreferencesからユーザー設定を取得する方法を尋ねました。ただし、公式ドキュメントとコースのソリューションでは異なることがわかりました。

Udacityコースの solution によると、SharedPreferencesPreferenceActivityインスタンスを取得するには、次のように呼び出す必要があります。

_SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
_

(ここで、getActivity()Context内で呼び出されるため、ここでは単にFragmentです。)

Android開発者サイトの 公式ドキュメント は、次のように呼び出す必要があることを示しています。

_SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE)
_

では、PreferenceManager.getDefaultSharedPreferences(Context context)Activity.getPreferences(int mode)の違いは何ですか?

注意:この質問には、ファイル名を必要とするgetSharedPreferences()については何も含まれていません。 getPreferences()getDefaultSharedPreferences()の違いについてです。

前もって感謝します。

12
fqf555

Androidドキュメントに提供したリンクによると

getSharedPreferences()-最初のパラメーターで指定する名前で識別される複数の設定ファイルが必要な場合に使用します。

getPreferences()-アクティビティに設定ファイルが1つだけ必要な場合に使用します。これがアクティビティの唯一の設定ファイルになるため、名前を指定しません。

そのため、保存/取得するデータをアプリのさまざまなアクティビティから使用できる場合は、getSharedPreferencesを使用します。これらの設定が1つのアクティビティでのみ使用される場合は、getPreferencesを使用できます。

編集:リンクした投稿で述べたように、「getDefaultSharedPreferencesは「com.example.something_preferences」のようなデフォルト名を使用しますが、getSharedPreferencesには名前が必要になることにも注意してください」

18
Shyri

主な違いの1つ:getPreferences()は、開かれたアクティビティにのみ関連するファイルを返します。 getDefaultSharedPreferences()は、アプリケーションのグローバル設定を返します。昨日それを難し​​い方法で学んだ。

12
me_

PreferenceManagerの内部を見ると:

public static SharedPreferences getDefaultSharedPreferences(Context context) {
    return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
            getDefaultSharedPreferencesMode());
}

/**
 * Returns the name used for storing default shared preferences.
 *
 * @see #getDefaultSharedPreferences(Context)
 * @see Context#getSharedPreferencesPath(String)
 */
public static String getDefaultSharedPreferencesName(Context context) {
    return context.getPackageName() + "_preferences";
}

private static int getDefaultSharedPreferencesMode() {
    return Context.MODE_PRIVATE;
}

そのため、getDefaultSharedPreferences()は、アプリパッケージ名とプライベートモードでgetSharedPreferences()メソッドを使用します。アクティビティからgetPreferences()を使用すると、同じgetSharedPreferences()メソッドを使用しますが、getLocalClassName();を使用します。

5
Onregs

以下にリンクされている最初の記事から: "注:SharedPreferences APIは、キーと値のペアの読み取りと書き込み専用であり、ユーザーインターフェイスの構築に役立つPreferenceAPIと混同しないでください。アプリの設定用(ただし、アプリの設定を保存するための実装としてSharedPreferencesを使用します)。 "

http://developer.Android.com/training/basics/data-storage/shared-preferences.html

http://developer.Android.com/guide/topics/ui/settings.html

1