Cierre el zócalo al terminar la aplicación

Mi aplicación tiene algunas actividades que en el primero conecto un socket para comunicarme con un servidor en las otras actividades. Este socket se ejecuta en un subproceso de trabajo.

Mi pregunta es: ¿dónde puedo cerrar este socket cuando la aplicación está terminando? Usando el botón BACK por ejemplo …

Pensé cerrar el socket en onDestroy() de la última actividad, pero esta actividad puede ser destruida por el sistema en tiempo de ejecución y cerrar el socket incluso si la aplicación no está terminando. No quiero esto.

Mi método run() del hilo que controla la conexión de socket es como:

 public void run() { if (this.bliveclient.isConnected()){ try { //... while (running) { //waiting for input data and do something... } } catch (IOException ex) { //handle exception } finally{ try { mySocket.close(); } catch (IOException ex) { //handle exception } } } 

Pero el bloque final nunca se llama.

¿Puede alguien darme alguna pista?

El bloque finally nunca se ejecuta porque el ciclo de ejecución nunca se completa. En algún momento Android acaba de matar el proceso, que mata a la máquina virtual y todo desaparece.

Si tiene una aplicación que sólo contiene actividades y está realizando E / S de red en un hilo independiente, entonces no hay manera de saber cuándo cerrar el hilo porque la "aplicación" nunca se "termina". Usted necesita definir cómo la aplicación "termina".

Una mejor manera es poner esto en un servicio, porque si Android quiere matar el proceso que primero llamará onDestroy () en el servicio que le dará la oportunidad de apagar el hilo correctamente.

  • Conectarse al conector Bluetooth de Android
  • Android: getBluetoothService () llamado sin BluetoothManagerCallback
  • Conectar a un socket bloquea la interfaz de usuario
  • Android: los sockets nativos no eliminan el modo de suspensión 3G en el primer intento
  • Envío de varios archivos a través de Bluetooth
  • Android BluetoothSocket OutputStream escribe bloques de forma infinita
  • Dispositivos Android conectados con NSD, cómo enviar mensajes utilizando sockets (Client-Client)?
  • Imprima un archivo PDF en una impresora usando PrintWriter a través de una conexión de socket
  • Los sockets "localhost" de Android fallan cuando no hay conexión de datos?
  • Android error de conexión bluetooth (no bt calcetín encontrado, scn 1) - bucle infinito
  • RDP a través de Bluetooth
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.