【问题标题】:Set TCP Client received data (External Thread) to TextView (Main Thread)将 TCP Client 接收到的数据(外部线程)设置为 TextView(主线程)
【发布时间】:2019-03-14 17:32:15
【问题描述】:

我创建了一个 Android 应用程序,它使用 AsyncTask 处理 TCP 客户端连接。服务器-客户端交互工作完美。现在,我有一个关于将字符串从客户端线程传递到主线程的实现的问题:

我想将从Client Thread接收到的String设置为TextView,非主线程无法与Android上的App UI交互。

所以我所做的是在 Main 线程上创建一个临时线程,每 100 毫秒检查一次客户端线程是否已收到数据,然后使用它。

以下是简化的代码:

客户端线程(无法访问 UI)

private volatile boolean hasReceivedData;
private String receivedData;

 ...

receivedData = inBuffer.readLine();
hasReceivedData = true;

 ...

public String getReceivedData() {
    return receivedData;
}

主应用线程(访问 UI)

private ClientThread client;
private TextView textView;
private Thread dataChecker;

 ...

dataChecker = new Thread(new Runnable() {
        @Override
        public void run() {
            while (!client.hasReceivedData()) {
                Utils.sleep(100);
            }
            textView.setText(client.getReceivedData());
        }
});
dataChecker.start();

我想知道是否有更好/正确的方法来实现这一点或更简单的方法。

提前致谢!

【问题讨论】:

    标签: java android multithreading performance


    【解决方案1】:

    您的AsyncTask 具有onPostExecute() 方法,该方法在doInBackground() 线程完成后运行。使用它来更新 UI。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多