What's the difference between getDefaultSharedPreferences() and getPreferences()?

前端 未结 4 1930
挽巷
挽巷 2020-12-09 18:54

I\'m currently taking the \"Developing Android Apps\" Udacity course. In the \"Lesson 3: New Activities and Intents > Use SharedPreferences\" segment, the instructor asked

相关标签:
4条回答
  • 2020-12-09 19:15

    Acoording to the link you provided to Android documentation

    getSharedPreferences() - Use this if you need multiple preferences files identified by name, which you specify with the first parameter.

    getPreferences() - Use this if you need only one preferences file for your Activity. Because this will be the only preferences file for your Activity, you don't supply a name.

    So it is, use getSharedPreferences when the data you want to save/retrieve can be used from different activities in the app. If those preferences will only be used in one Activity, you can use getPreferences.

    Edit: also note that as said in the post you linked 'getDefaultSharedPreferences will use a default name like "com.example.something_preferences", but getSharedPreferences will require a name'

    0 讨论(0)
  • 2020-12-09 19:27

    If you take a look inside 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;
    }
    

    So getDefaultSharedPreferences() use getSharedPreferences() method with your app package name and mode private, if you use getPreferences() from activity it will use the same getSharedPreferences() method but with getLocalClassName();

    0 讨论(0)
  • 2020-12-09 19:32

    One of the major differences: getPreferences () returns a file only related to the activity it is opened from. While getDefaultSharedPreferences () returns the application's global preferences. Learned that the hard way yesterday.

    0 讨论(0)
  • 2020-12-09 19:38

    From the first article linked below: "Note: The SharedPreferences APIs are only for reading and writing key-value pairs and you should not confuse them with the Preference APIs, which help you build a user interface for your app settings (although they use SharedPreferences as their implementation to save the app settings)."

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

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

    0 讨论(0)
提交回复
热议问题