2010-07-08 18 views
9

Desarrollé un juego en Android. Actualmente estoy guardando la mayoría de las estadísticas del juego en una base de datos. Sin embargo, la aplicación no utiliza más de una sola fila en el DB. Ahora estoy interesado en presentar algunas estadísticas nuevas, pero esto hará que mi DB se vuelva a instalar y así se despeje el progreso de todos. Para evitar esto en el futuro, estoy considerando almacenar las estadísticas del juego con SharedPreferences. Mi pregunta es cuántas cosas diferentes se pueden almacenar de esa manera antes de que se convierta en un problema. En total estaría almacenando alrededor de 40 valores, todos enteros.Limitaciones de Android SharedPreferences?

+0

40 enteros están muy bien para el almacenamiento en los SharedPreferences –

Respuesta

18

Las Preferencias Compartidas se escriben en archivos xml, por lo que el tamaño máximo de un archivo en Android es el tamaño que puede tener un archivo xml de Preferencias Compartidas. Puedo decir con seguridad que 40 valores enteros no serán un problema.

El tamaño máximo de un valor en un archivo SharedPreferences está limitado al tamaño máximo del valor que está intentando almacenar. (Lo que significa que no puede poner un valor String que sea más largo que Strings en Java.)

Lo único que le sugiero es asegurarse de procesar las ediciones tanto como sea posible (es decir, no haga .commit() cada cambio)) y tampoco crear un nuevo editor para cada cambio. (Estos son sólo buenas prácticas.)

SharedPreferences settings = getSharedPreferences(PREFS_FILE_NAME, 0); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putInt("firstValue", mFirst); 
editor.putInt("secondValue", mSecond); 
editor.putInt("thirdValue", mThird); 

// Commit the edits! (As infrequently as possible) 
editor.commit(); 
+3

"más largo que las cadenas pueden estar en Java" - Las cadenas pueden tener 2^31 - 1 = 2 mil millones de caracteres. Bueno, eso puede depender del almacenamiento interno del teléfono entonces. –

7

No sé acerca de las limitaciones, pero con respecto a su problema con el progreso everyones siendo aniquilado. Puede anular el método onUpgrade en su clase SQLite y luego migrar los datos de everyones a la base de datos más nueva.

+2

Exactamente. Vea los ejemplos del bloc de notas: puede usar ALTER TABLE para agregar nuevas columnas. O podrías agregar una tabla completamente nueva. Podrías cambiar a las Preferencias Compartidas, pero dado que ya elegiste un enfoque de base de datos, también puedes seguir con esto. – EboMike

+0

Creo que voy a probar el modelo de SharedPreferences y ver cuál me gusta más. Sin embargo, mantendré el DB porque en algún momento planeo permitir varios juegos guardados. Gracias por el consejo sobre Alter Table, me ayudará a migrar a SharedPreferences y a guardar el progreso de todos. – Tim

Cuestiones relacionadas