¿Cuál es la diferencia entre getDefaultSharedPreferences
y getSharedPreferences
en Android? ¿Alguien puede explicar?
224
¿Cuál es la diferencia entre getDefaultSharedPreferences
y getSharedPreferences
en Android? ¿Alguien puede explicar?
Context
instancia para llamar a cualquiera de ellos.Respuestas:
getDefaultSharedPreferences
utilizará un nombre por defecto como "com.example.something_preferences", perogetSharedPreferences
se requerirá un nombre.getDefaultSharedPreferences
de hecho utilizaContext.getSharedPreferences
(a continuación es directamente de la fuente de Android):fuente
getDefaultSharedPreferencesName
no es público ya que se necesita el nombre para el marco de copia de seguridad / restauración.Repasemos los puntos básicos de diferencia:
getDefaultSharedPreferences()
usa un nombre de archivo de preferencia predeterminado. Este valor predeterminado se establece por aplicación, por lo que todas las actividades en el mismo contexto de aplicación pueden acceder a él fácilmente como en el siguiente ejemplo:Las preferencias generalmente se almacenan en
/data/data/com.package.name/shared_prefs/com.package.name_preferences.xml
.El método alternativo:
getSharedPreferences(name,mode)
requiere indicar un nombre de preferencia (archivo) específico y un modo de operación (por ejemplo, privado, legible por el mundo, etc.)Como mencionó copolii, el resultado es el mismo, pero la primera opción es más simple y carece de la flexibilidad para dividirse en archivos de preferencias múltiples, que ofrece la segunda opción de
getSharedPreferences()
. Compartir las preferencias entre aplicaciones usando un indicador de operación MODE_WORLD_READABLE también es algo posible de usargetSharedPreferences()
, pero rara vez se usa.EN MI HUMILDE OPINIÓN,
getDefaultSharedPreferences()
puede usar de forma segura sin entrar en la confusión de los nombres de múltiples archivos de preferencias que son propensos a errores tipográficos y confusión, a menos que desee que diferentes módulos en su aplicación usen diferentes archivos de preferencias. Normalmente esto no es necesario. Si una aplicación necesita guardar muchos parámetros, probablemente sea mejor usar una base de datos externa, ya que también ofrece una mejor protección de datos.Si alguien conoce una buena razón para usar regularmente getSharedPreferences () y no getDefaultSharedPreferences (), hágamelo saber al comentar aquí.
fuente
Sé que esta publicación es un poco antigua, pero desde 24.0.1 de la biblioteca de soporte de v7 puede recuperar las preferencias predeterminadas por contexto en cualquier lugar usando
Ver https://developer.android.com/reference/android/support/v7/preference/PreferenceManager#getdefaultsharedpreferences
fuente
También hay una tercera función:
Vea mi pregunta y respuesta aquí: Desordenar con las preferencias compartidas de Android, ¿qué función usar?
fuente
GetSharedPreferences () y getDefaultSharedPreferences () se usan para acceder a las preferencias a nivel de aplicación .getDefaultSharedPreferences () se usa para obtener las preferencias compartidas que funcionan de acuerdo con el marco de preferencias general de Android. getDefaultSharedPreferences () es mejor para usar, ya que proporciona el objeto SharedPreferences que funciona con una PreferenceActivity de forma predeterminada.
fuente
Tenga en cuenta que usar las preferencias compartidas predeterminadas NO es lo mismo que usar las preferencias compartidas con el nombre de su paquete:
=> Nombre de las preferencias compartidas: " com.my.packagename "
=> Nombre de las preferencias compartidas: " com.my.packagename_preferences "
fuente