2010-11-06 7 views
6

Estoy desarrollando una aplicación de juego para varios jugadores para Android. Uno de los participantes está actuando como el anfitrión (el que creó la instancia del juego) y cada uno de los otros participantes se está conectando al host usando bluetooth.¿Mantener los hilos y el estado de la conexión en la aplicación de Android usando onSaveInstanceState?

Mi pregunta es la siguiente, este host tiene algunos hilos en ejecución para comunicarse y contiene todas las conexiones abiertas. He leído que mis Actividades pueden destruirse temporalmente y restaurarse más tarde y debería usar el mecanismo onSaveInstanceState para eso. Sin embargo, estoy hablando de una aplicación que actúa como un "servidor" para el juego y tiene conexiones e hilos abiertos que sirven a los otros clientes, ¿qué sucede con estas conexiones e hilos si el sistema operativo está decidiendo destruir mi actividad? ¿Están terminados? Si es así, ¿cuál sería el patrón recomendado para implementarlo correctamente? ¿Cómo puedo mantener una conexión en el paquete onSaveInstanceState? no es serializable Lo mismo ocurre con los hilos, ¿necesito recrearlos y destruirlos después de destruirlos y cuando se restaure la actividad? si mantengo todo este estado en alguna clase estática que represente el estado del juego? Si lo hago, ¿el SO no destruirá mis hilos/conexiones?

Miré el chat Bluetooth de muestra que viene con el SDK y yo, por lo que no se maneja el onSaveInstanceState por lo que no está muy claro qué debo hacer.

¡Gracias!

Respuesta

7

¿Qué sucede con estas conexiones y subprocesos si el sistema operativo está decidiendo destruir mi actividad?

Si creó esos hilos en una actividad, será mejor que los detenga, o los va a filtrar.

¿Cómo puedo mantener una conexión en el paquete onSaveInstanceState?

No puede.

Lo mismo aplica para los hilos, ¿necesito recrearlos y destruirlos al destruirlos y cuando se restaure la actividad?

Si fueron iniciados por la actividad, entonces, sí, por favor.

si mantengo todo este estado en alguna clase estática que represente el estado del juego? Si lo hago, ¿el SO no destruirá mis hilos/conexiones?

Ponga su lógica de servidor (hilos, conexiones, lógica de juego del lado del servidor) en un servicio de Android. Utilice startForeground() para mantener ese servicio, poniendo un Notification en la barra de estado en el camino para que el usuario tenga una manera fácil de volver a la actividad que le permite detener su servicio.

+0

Gracias. Veamos si te entiendo desde que soy nuevo en el desarrollo de Android. Debería tener una clase de servicio en mi aplicación que esté a cargo de las conexiones y los hilos de fondo que se comuniquen con los demás y administren el juego. Básicamente, cuando tiene una aplicación que utiliza bluetooth para comunicarse con otra aplicación, debe tener una clase de servicio en su aplicación; de lo contrario, esta conexión se perderá si se destruye su actividad. ¿O hay alguna otra forma de mantener la conexión? Si no hay ninguno, la muestra del chat bluetooth es muy engañosa. – Eitan

+0

@Eitan: "Básicamente, cuando tiene una aplicación que usa bluetooth para comunicarse con otra aplicación, debe tener una clase de servicio en su aplicación; de lo contrario, esta conexión se perderá si se destruye su actividad". - No puedo hablar específicamente con Bluetooth. Sin embargo, en términos generales, desea que su actividad limpie todo cuando se destruye. De lo contrario, sus usuarios le darán calificaciones de una estrella en el mercado por gastar CPU, batería, etc. – CommonsWare

+0

@Eitan: "Si no hay ninguna, la muestra del chat bluetooth es muy engañosa". -- ¿quieres decir esto? http://developer.android.com/resources/samples/BluetoothChat/index.html El ejemplo que muestra el uso de un servicio para mantener su 'BluetoothSocket'? – CommonsWare

Cuestiones relacionadas