¿Qué pasará con SharedPreferences al actualizar una aplicación Android?


He almacenado la configuración del usuario en SharedPreferences en mi Aplicación. ¿Qué pasará con SharedPreferences cuando actualice la Aplicación a través de Google Play Store a una nueva versión de la aplicación?

¿Los SharedPrefernces seguirán allí después de la actualización o se eliminarán?

Hasta ahora no he encontrado una respuesta en la web o Stackoverflow (¿puedo buscar con palabras clave incorrectas?).

¿Puedes indicarme algunos enlaces que describen esto proceso?

Editar: Mientras tanto, también encontré otra respuesta: SharedPreferences behaviour on Update / Uninstall

Editar 2: Desde el tiempo pasado un poco cuando hice esta pregunta por primera vez, recientemente aprendí que desde Android 6.0 (API 23) también es posible usar la funcionalidad de copia de seguridad automática para asegurar sus preferencias compartidas como se describe por Google aquí. Simplemente agregue el allowBackup="true" en su archivo AndroidManifest.xml.

Author: Community, 2012-09-28

3 answers

Cristian aquí dice: los datos de su aplicación se mantendrán cuando el usuario instale actualizaciones.

Pero debe ser con el mismo package name para detectar como una actualización de la aplicación anterior.

EboMike en Advertencia de usuario de Android que la actualización de la aplicación podría conducir a la pérdida de datos de la versión antigua de la aplicación? dice:

Francamente, perder datos debido a una actualización es inaceptable.

Edit :

Normalmente, las preferencias compartidas (así como otros datos de usuario) se mantendrán durante el proceso de actualización, pero a veces, debido a algún problema "desconocido", los datos pueden perderse, y supongo que está fuera de su control. Por lo tanto, simplemente puede creer que las preferencias de Shared se mantendrán(ver aquí).

Por lo tanto,si desea evitar borrar los datos del usuario en el progreso de la actualización,debe guardar los datos principales en un almacenamiento externo(esto puede ser un medio de almacenamiento extraíble,como una tarjeta SD o un almacenamiento interno no extraíble.) y no privado para tu App.O al menos guardarlo para que el usuario haga una copia de seguridad de los datos antes de actualizar .Luego,en la primera ejecución de su aplicación (actualizada), verifique que haya algún archivo de copia de seguridad en el almacenamiento externo o no.

Si quieres saber ¿Qué cosas deben / pueden suceder al actualizar una aplicación?,No hice ninguna buena descripción para this.It es complicado y relativo con Android Security,Application signing,copy protection y otros temas.Quiero decir que si cambia el estado de su Aplicación en cualquiera de los campos anteriores, causa diferentes resultado.
Por ejemplo,si CHANGED COPY PROTECTION FROM ON to OFF OR OFF to ON, su aplicación se actualizará, pero hace que todas sus preferencias compartidas se pierdan, el acceso a los archivos sea imposible y ... .
Usted aunque tiene que ser cuidado en acerca de las condiciones causa su nueva Aplicación being considered como una actualización para la aplicación anterior(ver Cosas que No pueden Cambiar).

También debe tener cuidado con su código,puede ser causado la eliminación de datos de sus bases de datos(ver actualizar la aplicación con SQLite precargado).

Pero en última instancia, si tienes cuidado, puedes decir:

El proceso de actualización solo reemplaza el archivo apk(y entonces para qué está en él ejemplos de elementos de diseño,...) y no altera bases de datos, preferencias compartidas y cualquier otro archivo que se genera en tiempo de ejecución (probablemente en este caso, nueva aplicación se instala con el UID que es igual a UID de aplicación anterior).

Puedes ver estas páginas para más detalles:

¡Socorro!? La actualización de nuestro applicatoin en el mercado elimina el guardado Preferencias compartidas.
La protección anticopia del mercado rompe totalmente el acceso del archivo después de actualizar
¿Alguien puede explicar el proceso de actualización de la aplicación?

 60
Author: hasanghaforian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:56

Creo que cuando actualizé mi aplicación la última vez a través de Google Play, las preferencias de Shared no se vieron afectadas.
Los estaba usando para iniciar sesión automáticamente, y después de la actualización lo hizo.
Fue hace un mes, mi memoria podría ser borrosa por lo que es mejor escuchar las opiniones de otras personas también.

 4
Author: Lazy Ninja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-28 10:09:24

Después de depurar durante más de 4 horas, descubrí que estaba guardando un modelo como cadena al serializarlo. Una clase serializable tiene un id único por nombre serialVersionUID, que se establece por defecto en tiempo de ejecución y el id se calcula por el nombre de la clase , las interfaces y los nombres de las variables también. Descubrí que cambié la clase modelo, agregué una variable y luego actualizé la aplicación. Dado que la clase ahora se ha cambiado por lo que un nuevo serialVersionUID se estableció y, por lo tanto, en la actualización, no fue capaz de deserializar la cadena y crear el modelo y estaba dando java.io.InvalidClassException

Establecer explícitamente serialVersionUID para evitar este problema

static final long serialVersionUID = 42L;
 4
Author: abhishek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-20 08:02:51