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 …
- Dispositivo Android (excepto la nota de galaxia 2) no puede obtener paquetes UDP
- No se puede establecer el valor DSCP en la aplicación android
- Android - no se pudo instalar * smartsocket * listener
- Carga de datos desde la aplicación de Android al programa de escritorio
- Android bluetooth socket.connect () falla
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?
- Aplicación de congelación de socket Android Bluetooth
- ¿Cuál es la diferencia entre DataOutputStream y ObjectOutputStream?
- Enviar y recibir datos a través de Bluetooth
- Lea desde InputStream usando lectura contra IOUtils.copy
- La conexión Bluetooth falló "java.io.IOException: se ha producido un error en la lectura, el socket puede cerrarse o el tiempo de espera, leer ret: -1"
- InputStream que es más rápido read () o read (byte, offset, length)
- ¿Cómo leer la respuesta HTTP a través de sockets?
- Segunda conexión al socket del servidor rechazada en android
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.