现在我目前知道可以获取SharedPreferences实例的常用方法有三个:
1.通过Context的getSharedPreferences(String name,int mode)。
2.通过Activity的getPreferences(int mode)。
3.通过SharedPreferenceManager的静态方法getDefaultSharedPreferences(Context context)。
mode 的取值和含义:
mode指定为MODE_PRIVATE,则该配置文件只能被自己的应用程序访问。
mode指定为MODE_WORLD_READABLE,则该配置文件除了自己访问外还可以被其它应该程序读取。
mode指定为MODE_WORLD_WRITEABLE,则该配置文件除了自己访问外还可以被其它应该程序读取和写入
三种方式的区别:
Context的getSharedPreferences(String name,int mode)会按照我们的指定的名字为文件名称和指定的模式来指定文件权限。
Activity中的源码:
从Activity中的源码我们可以看出我们调用Activity中的getPreference方法实际上还是调用了Context的getSharedPreferences(String name,int mode)这个方法。只不过有一点区别是它会按照我们指定的模式和使用当前类不带包名的类名作为文件的名称。
SharedPreferenceManager中的源码:
源码中我们可以看出我们调用getDefaultSharedPreference(Context context)这个方法实际上还是调用了context的getSharedPreferences(String name, int mode)方法,只不过我们生成的xml文件的名字为PackageName加上 _preferences,并且将这个文件将采用默认的MODE_PRIVATE模式。
总结:
本质区别就是保存的文件名字不一样和访问权限不同。第一种名字和权限是自己设计的。第二种只有权限是我们设计的,文件名字是当前类不带包名的类名。第三种名字是包名加上_preferences
,权限默认为只能自己的应用程序访问。