Android прослушивает сообщения из сокета сервера - PullRequest
9 голосов
/ 13 февраля 2012

Я пытаюсь создать приложение для 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) {
                // ...
            }

        }

    }

1 Ответ

5 голосов
/ 13 февраля 2012

Вы можете создать в своей службе один поток для прослушивания на сервере.Второй поток предназначен для отправки команд.Затем для вашего сервиса вы должны создать основной поток с обработчиком в нем.Этот обработчик будет обрабатывать сообщения из этих двух потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...