Я пытаюсь создать приложение для Android, которое взаимодействует с локальным сервером через сокет. Связь передает простые команды и данные в строках, используя JSON. Клиент должен постоянно прослушивать входящие сообщения с сервера и обновлять пользовательский интерфейс при получении новых данных.
Итак, я создал сетевой сервис, который является связанным сервисом, работающим в фоновом режиме. Из своей деятельности я связываюсь с сервисом и получаю экземпляр объекта сервиса. Служебный объект содержит методы экземпляра, которые позволяют мне отправлять команды на сервер.
Моя проблема в том, как мне разрешить моей службе постоянно прослушивать сообщения с сервера, не блокируя возможность отправлять сообщения на сервер?
private Socket socket = null;
private PrintWriter out = null;
private BufferedReader in = null;
private Listener listener;
private String host = "10.0.1.4";
private int port = 3000;
public NetworkService()
{
try {
if (socket == null)
{
socket = new Socket(this.host, this.port);
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
if(listener == null)
{
listener = new Listener();
Thread thread = new Thread(listener);
thread.start();
}
} catch (Exception e) {
// ...
}
}
}
public class Listener implements Runnable
{
@Override
public void run() {
try {
String line = null;
while((line = in.readLine()) != null)
{
// Do something. Never gets here
}
} catch (Exception e) {
// ...
}
}
}