Как я могу создать слушатель tcp сообщений в моем клиенте Android? - PullRequest
0 голосов
/ 17 марта 2012

Я новичок для Android. Я работаю над клиентским (android) -серверным (java) приложением архитектуры для моего проекта. У меня есть вопросы .. Мои действия 4-5 будут отправлять tcp-сообщения на сервер и получать ответ, чтобы что-то сделать самостоятельно. Поэтому мне нужен фоновый слушатель для этих сообщений, а затем сделать что-то в этих 4-5 действиях. Где я могу реализовать этот поток слушателя, чтобы ответить на мои различные действия. Это хороший способ написать 5 AsyncTask в подклассе этих Activites на сервер обмена сообщениями? Я думаю, что 1 поток может сделать работу; но как я могу связать деятельность .. Это услуга, о которой я говорю? Но я не хочу что-то делать, когда мое приложение разрушается.

1 Ответ

0 голосов
/ 19 марта 2012

Я написал очень похожее приложение и использую синглтон для этой работы. Когда ваша деятельность создана, вызовите Listener.getInstance (), чтобы получить экземпляр Listener. Если он не был создан, создайте его.

В объекте Listener создайте поток, который будет выполнять всю связь с сокетом. Когда сообщение становится доступным, отправьте его обратно в основной поток графического интерфейса с помощью обработчика (или другого механизма синхронизации).

public class Listener implements Runnable, Callback
{
    String ipAddress;
    int ipPort;
    private listener = null;
    Handler handler;

    public Listener
    {
        handler = new Handler(this);
    }

    public Listener getInstance()
    {
        if (listener == null)
            listener = new Listener()
        return listener;
    }

    public void connect()
    {
        thread = new thread();
        thread.run(this);
    }

    public void run()
    {
        socket = new Socket();
        socket.connect(new InetSocketAddress(ipAddress, ipPort));

        //do your thread/socket work...

        //when a message is available via the socket, post the message back to the main GUI thread using a handler.
        Message msg = new Message();
        //fill the msg with data
        handler.sendMessage(msg);
    }

    @Override public boolean handleMessage(Message msg)
    {
        //hand message to current activity
    }
}

Отличный пример сокета можно найти здесь: http://thinkandroid.wordpress.com/2010/03/27/incorporating-socket-programming-into-your-applications/

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

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