Hola usuario de nuestra web, descubrimos la solución a lo que buscas, deslízate y la encontrarás aquí.
Solución:
Si necesita que el socket esté vivo incluso después de que se detenga su aplicación. Mueva su socket al servicio de fondo y luego puede agregar los eventos de socket en el servicio.
Abre el zócalo en el hilo principal. No abra las conexiones de socket en el subproceso principal, le dará un error ANR (la aplicación no responde) que se produce debido a una gran cantidad de trabajo en el subproceso de la interfaz de usuario. Bloquea el subproceso de la interfaz de usuario durante más de 5 segundos. Por lo tanto, le sugiero que abra las conexiones de socket en el hilo dentro del servicio.
Aquí hay un ejemplo usando un socket simple:
- Cree una clase de servicio para iniciar el hilo en el servicio en segundo plano
- Crear en la clase Thread para abrir la conexión del socket en el hilo
-
crear una clase separada para la comunicación de socket
public class SocketBackgroundService extends Service private SocketThread mSocketThread; @Override public IBinder onBind(Intent intent) return null; @Override public void onCreate() mSocketThread = SocketThread.getInstance(); @Override public void onDestroy() //stop thread and socket connection here @Override public int onStartCommand(Intent intent, int flags, int startId) if (mSocketThread.startThread) else stopSelf(); return START_STICKY; public class SocketThread extends Thread { private static SocketThread mSocketThread; private SocketClient mSocketClient; private SocketThread() // create single instance of socket thread class public static SocketThread getInstance() if (mSocketThread == null)//you can use synchronized also mSocketThread = new SocketThread(); return mSocketThread; public boolean startThread() mSocketClient = new SocketClient(); if (socketClient.isConnected()) mSocketThread.start() return true; return false; @Override public void run() super.run(); while (mSocketClient.isConnected()) // continue listen // otherwise remove socketClient instance and stop thread public class SocketClient //write all code here regarding opening, closing sockets //create constructor public SocketClient() // open socket connection here public boolean isConnected() return true;
Valoraciones y comentarios
Si conservas algún reparo y capacidad de enriquecer nuestro división puedes realizar un informe y con placer lo analizaremos.