我们如何在UI线程中创建处理程序以将数据发送到另一个线程

时间:2018-09-09 09:35:23

标签: android multithreading

我在Android应用程序中有3个线程。 1)UI线程 2)服务器线程 3)客户端线程

当用户输入字符串并从UI提交数据时,我需要将该数据传递到服务器线程,以便服务器将其通过蓝牙套接字发送给客户端。

要将数据发送到服务器线程,我正在使用以下代码

 Toast.makeText(getApplicationContext(), "send data to server handler", Toast.LENGTH_SHORT).show();
        Handler serverHandler=new Handler(Looper.getMainLooper());
        Message msg=new Message();
        msg.obj=text.getText();
        serverHandler.sendMessage(msg);

据我了解,我需要从与服务器线程相关的循环程序创建一个处理程序并发送消息。 有人可以建议这是否是从循环程序创建处理程序对象的正确方法。

这是我拥有的服务器线程

Looper.prepare();

                    serverHandler = new Handler() {
                        public void handleMessage(Message msg) {
                            // Act on the message
                            String data=(String)msg.obj;
                            try {
                                socket.getOutputStream().write(data.getBytes());
                            }
                            catch(Exception e){

                            }
                        }
                    };
                    Looper.loop(); 

1 个答案:

答案 0 :(得分:0)

为避免混淆,只需创建一个AsyncTask

  private class DataHandler extends AsyncTask<Void, Void, Void> {
        private String message = null;
        private Socket socket;

        public DataHandler(String message, Socket socket) {
            this.message = message;
            this.socket = socket;
        }

        @Override
        protected Void doInBackground(Void... voids) {
            try {
                socket.getOutputStream().write(message.getBytes());
            } catch (Exception e) {

            }
            return null;
        }
    }

AsyncTask调用

new DataHandler(text.getText(),socket).execute();