Android envía datos desde el hilo principal de la interfaz de usuario a otro hilo

Necesito enviar algunos datos del hilo principal a otro hilo. Ya he leído un montón de materiales en hilos, asynctasks y manejadores, pero tal vez me crearon cierta confusión. Leí que necesito crear un controlador para mi 'segundo hilo' para poder enviarle mensajes desde el hilo principal (por ahora no me preocupa enviar nada al hilo principal).

Necesito el segundo hilo para conectarme a un servidor (a través de un socket) y enviar una fecha en algunos eventos de usuario. Estoy intentando hacerlo de manera eficiente (no abrir / cerrar conexiones de socket innecesarias). Así que me pregunto ¿dónde debería poner mi comando de socket abierto? Además, en el método handleMessage () de mi controlador, necesito una referencia a la secuencia de salida de socket para enviar datos al servidor.

Actualmente tengo el siguiente código:

protected void initThread(){
    this.thread = new HandlerThread(WorkerHandler.class.getCanonicalName()){        

        @Override
        public void run() {
            super.run();
            try{
                handler = new WorkerHandler(getLooper());
            }catch(Exception e){
                e.printStackTrace();
            }               
        }

    };
    this.thread.start();
}

El método initThread () se llama en el método onCreate () de mi actividad.

Aquí sigue el código de mi clase de manejador personalizado:

public class WorkerHandler extends Handler {

protected Socket socket;
protected BufferedWriter writer;

public WorkerHandler(Looper looper) throws Exception{
    super(looper);      
    this.socket = new Socket("192.168.1.7", 5069);
    this.writer = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream(), "utf-8"));

}

public BufferedWriter getWriter(){
    return this.writer;
}

public Socket getSocket(){
    return this.socket;
}

@Override
public void handleMessage(Message msg) {
    Draw draw = (Draw) msg.obj;
    if (draw != null){          
        if (getWriter() != null){
            try{
                getWriter().write(DrawUtil.toJson(draw)+"\n");
                getWriter().flush();
            }catch(IOException e){
                e.printStackTrace();
            }
        }
    }
}

}

Y nuevamente, en mi actividad, desencadeno el método sendDataToServer ()

protected void sendDataToServer(){
    Draw draw = new Draw(getFlowType(), getID(), getSeq(), Calendar.getInstance(), startX, startY, endX, endY);
    if (getWorkerHandler() != null){
        Message msg = getWorkerHandler().obtainMessage();
        msg.obj = draw;
        getWorkerHandler().sendMessage(msg);
    }       
}

Pero mi referencia al objeto WorkerHandler siempre es nula. Estoy bastante seguro de que malinterpreté algún concepto ... ¿Podría darme algunos consejos?

¡Muchas gracias!

Respuestas a la pregunta(3)

Su respuesta a la pregunta