Tengo un juego donde dibujo y muevo bitmaps sobre un SurfaceView. El usuario puede interactuar (arrastrar y soltar) estos mapas de bits. Cuando el jugador presiona el botón de inicio y luego regresa al juego, quiero poder detener el juego, luego restaurarlo a donde estaba antes de que lo dejara. ¿Cuál es la mejor manera de almacenar mis objetos personalizados?¿Dónde debería guardar mi estado de nivel de juego?
¿Debo aplicar
onSaveInstanceState(Bundle)
y tienen todas las clases cuyos objetos Quiero salvar implementar la interfazParcelable
? Esto sería bastante trabajo, y todavía no estoy seguro de cómo podría guardar cosas como mapas de bits. Supongo que no lo haría y solo los volvería a cargar desde el disco.También estoy confundido acerca de qué tipo de almacenamiento ofrece un paquete: almacenamiento en disco que nunca desaparece a menos que lo borre usted mismo, o almacenamiento de memoria que desaparece si el SO decide eliminar su programa de memoria mientras está en segundo plano . De acuerdo con los comentarios en this question, es el almacenamiento en disco. El documentation implica que es memoria de almacenamiento, diciendo
Note that it is important to save persistent data in onPause()
, sin embargo, no me parece muy claro. This page también implica que no es persistente: solo dura mientras la aplicación permanezca en la memoria. Entonces, ¿cuál es?- El último enlace anterior sugiere usar
onRetainNonConfigurationInstance()
para mantener objetos en la memoria mientras la aplicación está en segundo plano. Esto implicaría que si el sistema OS extrae el programa de la memoria mientras está en segundo plano, todo se perderá. Esto parece ser lo que hacen la mayoría de los juegos (todos los que probé): si tocas el inicio mientras juegas y vuelves a entrar, el nivel se reanuda. Si tocas el inicio, abres muchas cosas (suficientes para que Android elimine el juego de la memoria), luego vuelves, no se reanuda nada, el juego comienza en el menú principal. ¿Eso significa que esto es lo que usan, y si es así, ¿es una buena práctica?
Tenga en cuenta que la pregunta sobre la persistencia de Bundle
es solo una curiosidad secundaria. Realmente no me importa si el estado de este juego no se guarda de forma permanente y se puede perder después de que el juego esté en segundo plano por un tiempo (como se describe en 2
arriba). Estoy interesado en la mejor práctica para este caso.
Una pequeña nota: el mapa de bits implementa Parcelable. (http://developer.android.com/reference/android/graphics/Bitmap.html). Creo que la mejor/más segura forma es implementar su solución n. ° 1. – YuviDroid
@YuviDroid - ah, lo extrañé, gracias :). Eso significa que puedo hacerlo, pero aún deja a alguien con una reputación de 168k implicando que no debería en la pregunta a la que me he vinculado: http://stackoverflow.com/questions/4285877/which-one-to-use-onsaveinstancestate-vs -sintenerinstancia de configuración-Me gustaría escuchar algunos argumentos a favor o en contra antes de elegir un método, porque encuentro el tema muy confuso. – IVlad