2011-09-15 27 views
18

Mi aplicación utiliza SharedPreferences (con la ayuda de una actividad de preferencia) para almacenar todas las configuraciones. Pero a veces todas las configuraciones se eliminan y todos los valores vuelven a ser los predeterminados. Sobre todo en las pestañas de Android 3.x. En teléfonos inteligentes normales no hay problemas.SharedPreferences a veces se eliminan

He observado que todas las configuraciones se eliminan cuando Android mata el proceso de la aplicación. Me di cuenta de esto porque el icono de notificación ya no se muestra. También me pregunto por qué el proceso se mata en las tabletas y no en los teléfonos inteligentes. En mi teléfono inteligente, el icono de notificación nunca desaparece.

Mi aplicación también tiene un servicio, el proceso principal y el servicio tanto de lectura como de escritura en SharedPreferences. A veces he notado que todas las configuraciones se borran una vez que el servicio escribe en SharedPreferences. Pero no sucede todo el tiempo.

¿Alguna idea? Me doy cuenta de que SharedPreferences no debe ser utilizado por diferentes procesos, ¡pero funciona en todos los teléfonos inteligentes sin problemas!

+0

Para la última oración: la actividad y el servicio se ejecutan en el mismo proceso. Solo son componentes diferentes de la misma aplicación. –

+0

También he notado que las Preferencias Compartidas se eliminan en algunos teléfonos. No he podido determinar el 100% de lo que lo está causando. Pero estoy cambiando a un nuevo modelo de almacenamiento de datos como una posible solución. – FoamyGuy

+0

@mice: ¿Estás seguro? Porque en LogCat tienen diferentes pid's (id de proceso) – almisoft

Respuesta

2

Las Preferencias Compartidas generalmente funcionan muy bien y como usted mencionó sin ningún problema en los teléfonos inteligentes. También debería funcionar en tabletas. Sin embargo, sería mejor usar sqlite o respaldar sus preferencias compartidas en un servidor para cada ID de usuario. La pérdida de datos es un problema.

+0

Muchas gracias por su respuesta rápida.Pero esto es solo una solución. Y no es aplicable para mi actividad de preferencia, porque esta actividad solo funciona con Preferencias Compartidas ... – almisoft

19

Descubrí el motivo por el que desaparecen las configuraciones: Si dos procesos escriben datos en SharedPreferences, puede suceder que todas las SharedPreferences se restablezcan a sus valores predeterminados. En mi caso, todas las configuraciones se borran cuando el servicio escribe los primeros datos en SharedPreferences.

Ahora, el servicio proporciona solo acceso de lectura a SharedPreferences. La configuración a la que acceden ambos procesos de escritura se almacena en una base de datos.

+0

¿Resolvió el problema? No lo marcó ... –

+0

después de eliminar el acceso a las preferencias compartidas de un servicio. Encontré que el problema estaba resuelto. – vallllll

3

He tenido el mismo problema. Todos los valores de las preferencias compartidas se convierten en valores predeterminados si un valor escrito ocasionalmente con key = null. Esto es posible cuando se crean nuevas constantes usando Eclipse, que las inutiliza por defecto, y luego se olvida de ir al comienzo de la clase y cambiar la constante a algún valor significativo. Si continúa usando la aplicación, la operación de lectura de preferencias compartidas devolverá valores válidos. Pero cuando se cambia el contexto (por ejemplo, cuando la actividad se destruye por android y se vuelve a crear), todos los valores de las preferencias compartidas devolverán los valores predeterminados (ceros).

¡Compruebe las claves de sus preferencias compartidas! Espero que esta respuesta ayude a alguien.

Cuestiones relacionadas