Android handler, execute post () not in ui thread

From the very beginning, although the methods Handler post()and postDelayed()doing something in a different thread from the UI thread, and I decided to create it Socket Socket, but it does not work.

I get it NetworkOnMainThreadException.

Is there a way to accomplish tasks post()and postDelayed()not in the user interface thread?

public class ServerHandler extends Handler {

private Socket serverSocket;   

public ServerHandler(){
    super(new MyHandlerThread("MyHandlerThread").getLooper());
}

@Override
public void handleMessage(Message msg) {
    super.handleMessage(msg);
}

public void connectServer()
{
    post(serverConnection);
}

public void writeMessage(String msg){
    try {
        serverSocket.getOutputStream().write(msg.getBytes());
        Log.d("MyLog","Message sent!");
    }
    catch (IOException io){
        Log.d("MyLog","SendMessage error");
    }
}

private Runnable serverConnection = new Runnable() {
    @Override
    public void run() {

        try {
            serverSocket = new Socket("152.168.21.24", 5001);

            Log.d("MyLog","Server connected!");

            while(true){
                Log.d("MyLog","Listening server");
                byte[] buffer = new byte[256];
                int bytesReceived = serverSocket.getInputStream().read(buffer);
                if(bytesReceived==-1) {
                    throw new IOException("Server disconnected");
                }
                else {
                  String msg = new String(buffer,0,bytesReceived);
                  Log.d("MyLog","Message received: " + msg);

                }
            }
        }

        catch (IOException io){
            Log.d("MyLog","Server connection error " + io.getMessage());
            connectServer();
        }
    }
};

}

+4
source share
1 answer

Handler#post() Looper. Handler Looper, . Looper, . , , Looper. Looper Handler.

, , . HandlerThread. HandlerThread getLooper , Looper .

EDIT: . , Looper.

+4

Source: https://habr.com/ru/post/1670951/


All Articles