2012-02-21 8 views
21

Es curioso. Hay 3 Método:cuando use getDefaultSharedPreferences y getSharedPreferences

1. getPreferenceManager().setSharedPreferencesName(String PrefName); 

2. PreferenceManager.getDefaultSharedPreferences(Context context) 

3. Context.getSharedPreferences (String name, int mode) 

que yo sepa, sólo se utiliza el tercer método, cuando se utiliza el primer método, ¿verdad? Pero con 3 método también usamos addPreferencesFromResource(int resID); Entonces, ¿cuál es la diferencia? ¿Cuándo podemos usar uno de estos métodos? Gracias!

Respuesta

23

Vayamos un paso a la vez:

  1. setSharedPreferencesName() es el método que permite establecer el nombre del grupo de preferencia para su uso posterior. Esto es útil, por ejemplo, cuando se utiliza la clase auxiliar de PreferencesActivity antes de cargar las preferencias del archivo de recursos XML llamando al addPreferencesFromResource(). Por lo tanto, no es tan común como los otros 2 métodos que mencionaste anteriormente.

  2. getDefaultSharedPreferences() usa un nombre predeterminado, generalmente almacenado como /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml. Se usa comúnmente. Tenga en cuenta que este valor predeterminado se establece en por aplicación.

    El método alternativo - getSharedPreferences() requiere indicar un nombre de preferencia de archivo y un modo de operación.

  3. Como aparece también en another answer about shared preferences, getDefaultSharedPreferences() de hecho utiliza Context.getSharedPreferences, por lo que el resultado es el mismo, pero sin la flexbility para dividir a múltiples archivos de preferencias, que es ofrecido por getSharedPreferences(). Compartir las preferencias entre aplicaciones usando un indicador de funcionamiento MODE_WORLD_READABLE también es algo posible usando getSharedPreferences(), pero se usa raramente.

mi humilde opinión, getDefaultSharedPreferences() se pueden usar de forma segura sin entrar en la confusión de varios nombres de archivo de preferencias que son propensos a errores tipográficos y confusión.

Si alguien sabe de una buena razón para usar getSharedPreferences() y no getDefaultSharedPreferences(), por favor hágamelo saber comentando aquí.

+1

las principales diferencias es getDefaultSharedPreferences (vs getSharedPreferences) - si desea cambiar el cualquier el valor de preferencia en getDefaultSharedPreferences luego usa apply() en lugar de commit(), si usas commit en getDefaultSharedPreferences nunca aplicará ningún efecto .... He gastado más de 2 horas ... por este tonto error, así que solo mencionar aquí. –

1

getDefaultSharedPreferences() utiliza un nombre de archivo de preferencia predeterminado como "com.example.something_preferences". Este defecto se fija por aplicación, por lo que todas las actividades en el mismo contexto de aplicación puede acceder a él fácilmente como en el siguiente ejemplo:

SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this); 
if (spref.contains("email")) { 
    String sEmailAddr = spref.getString("email", ""); 
} 

Las preferencias se almacenan generalmente en /data/data/com.package.name/shared_prefs /com.package.name_preferences.xml

getSharedPreference es la mejor manera porque el uso de getDefaultSharedPreferences tiene algunos defectos

  1. actualy getDefaultSharedPreferences no funciona correctamente en algunos dispositivos cuando acumulación con api targer 13
  2. partir aplicación de acceso directo y de el menú me da diferente DefaultSharedPreferences. Después de eliminar DefaultSharedPreferences de mi código, funciona perfecto. No puedo decir: las personas no hacen shrotcuts, así que tuve que cambiar el código

Esto también puede ayudar a link

Cuestiones relacionadas