Я создал приложение для Android, которое обрабатывает соединение клиента TCP с AsyncTask.Взаимодействие сервер-клиент работает отлично.Теперь у меня есть вопрос о реализации, которую я сделал для передачи строки из клиентского потока в основной поток:
Я хочу установить полученную строку из клиентского потока в TextView, и неосновнуюпотоки не могут взаимодействовать с пользовательским интерфейсом приложения на Android.
Поэтому я создал временный поток на главном, который каждые 100 мс проверяет, получены ли данные в потоке клиента, и затем использует его.
Вот упрощенные фрагменты кода:
Поток клиента (нет доступа к пользовательскому интерфейсу)
private volatile boolean hasReceivedData;
private String receivedData;
...
receivedData = inBuffer.readLine();
hasReceivedData = true;
...
public String getReceivedData() {
return receivedData;
}
Основной поток приложения (Доступ к пользовательскому интерфейсу)
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();
Я хотел бы знать, есть ли лучший / правильный способ достижения этого или более простой.
Заранее спасибо!