Я написал очень похожее приложение и использую синглтон для этой работы. Когда ваша деятельность создана, вызовите 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/
В качестве альтернативы вы можете выполнить всю эту работу в службе. Я просто выбрал этот путь, когда начал. Это хорошо сработало для меня.