2012-03-16 58 views
0

我是Android的新手。 我正在爲我的項目開發一個客戶端(android)-server(java)arcitecture應用程序。我有問題。 我的4-5活動將發送tcp消息到服務器並獲得迴應,以自己做一些事情。所以我需要一個背景聽衆這些消息,然後在這些4-5活動中做一些事情。我在哪裏可以實現這個監聽器線程來響應我的不同行爲。將這些Activites的子類中的5個AsyncTask寫入消息傳遞服務器是否是一種好方法? 我覺得1個線程可以做的工作;但我怎麼能綁定活動.. 即時通訊談論的服務?但是當我的應用程序被破壞時,我不想做點什麼。我如何在Android客戶端設計tcp消息監聽器?

回答

0

我寫了一個非常類似的應用程序,並使用一個單例來完成這項工作。當你的活動被創建時,調用Listener.getInstance()來獲取Listener的實例。如果尚未創建,請創建它。

在Listener對象中,創建一個線程來執行所有套接字通信。當消息變得可用時,使用處理程序(或其他一些同步機制)將其發回到主GUI線程。

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/

作爲另外,你可以在一項服務中完成所有這些工作。我剛開始時就選擇了這條道路。它對我來說效果很好。

+0

謝謝你的回答,我開始寫一個服務來完成所有這些工作。 – 2012-03-21 23:11:12