2013-06-26 31 views
0

請讓我先解釋我的問題。 我有一個服務器使用基於字節流的自定義協議的tcp-ip套接字連接。客戶端,一個android應用程序,當然也實現協議。但是,兩者都需要通過兩種方式進行交流,閱讀其他同行並寫出來。在服務器上它沒有問題,但android客戶端粉碎我的頭。 我想要的基本上是如何在啓動應用程序和(重新)使用它在每個活動中發送和接收數據時,android客戶端如何建立tcp連接服務器。在Android設備上處理多個活動的一個tcp連接的最佳實踐

我讀到這個:Android TCP connection best practice 當然,討論何時使用服務和單身。 我仍然不確定android上的facebook應用程序如何做這樣的應用程序。好的,他們可能會使用REST而不是普通的bytestream tcp連接,但是當打開應用程序時,它將開始接收數據,並在完成數據(可能是新聞流)時呈現並顯示。看起來像AsyncTasks,不是嗎?

所以我的問題是... ...:

  1. 這樣的應用程序怎麼能是什麼樣子? - 如何實現這種通信方式(使用AsyncTasks或僅僅作爲一個單獨的線程?)?那麼我是否需要在每個活動中實施一個或多個AsyncTasks? - 在這種情況下,我希望每個AsyncTask都使用來自單例的Socket和它的流。那可能嗎?

  2. 你對此主題有任何好的示例項目嗎?

感謝您提前提供任何幫助!

回答

0

我最近在研究這個話題,和你有幾乎相同的用例,但有一點不同:我實現了多個併發的TCP套接字連接,這是很多工作,但最終它像一個魅力。

在我看來,AsyncTask是無效的選項。如果您希望傳輸修復大小的數據集合(如圖像文件夾或大文件),同時保持用戶與當前進度保持同步,則它們可以具有優勢。對於靈活的通信,使用線程更容易。

使「ConnectionThreads」可重用於多個活動的正確方法是「ConnectionService」。您的活動可以訂閱此service並要求它打開到服務器的連接。一旦連接,即使活動被暫停/銷燬,服務也會保持連接。

+0

感謝您的回覆。我在考慮使用單獨線程而不是AsyncTasks時關於靈活性的陳述。也許你可以指出這一點多一點? - 我很好奇,因爲我發現只有以下幾點是單獨線程的優點:只建立/關閉連接一次,分離定義的一系列功能(相當好的設計實踐) –

0

我通常會做的是我使用服務來做實際的請求,然後將信息放在數據庫中。 在活動上,我使用遊標顯示我想要的數據,因此當數據庫更新時,活動會自動更新。

這是第一個Twitter的應用程序是怎麼做

我不知道,如果Volley作品在你的情況,但你應該看看一個io 2010 presentation。有關於Volley的io 2013 presentation

相關問題