【发布时间】: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