Saltar al contenido

¿Cómo manejar eventos de socket como servicio en segundo plano en Android?

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:

  1. Cree una clase de servicio para iniciar el hilo en el servicio en segundo plano
  2. Crear en la clase Thread para abrir la conexión del socket en el hilo
  3. 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *