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

Posted

技术标签:

【中文标题】我们如何在 UI 线程中创建处理程序以将数据发送到另一个线程【英文标题】:How can we create a handler in UI thread for sending data to another thread 【发布时间】:2018-09-09 09:35:23 【问题描述】:

我在 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 创建一个处理程序并发送消息。 有人可以建议这是否是从 looper 创建处理程序对象的正确方法。

这是我拥有的服务器线程

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】:

为避免任何混淆,只需创建一个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();

【讨论】:

以上是关于我们如何在 UI 线程中创建处理程序以将数据发送到另一个线程的主要内容,如果未能解决你的问题,请参考以下文章

如何正确引用/检索在 AppData 中创建的临时文件以将文件上传到服务器?

如何在java中创建独立的子段?

Android---Handler消息处理机制

Qt5中创建临时的后台线程。

异步数据处理Handler

如何在 sql 中创建查询以将句子切成单词并将它们按频率添加到新表中