2011-07-02 22 views
1

首先,這是我正在編寫的第一個Android應用程序,並且我以前的Java經驗很少。所以沒有什麼太簡單 - 我可以很容易地錯過任何「明顯」的東西。如何使用網絡I/O和多項活動來組織這款Android應用程序?

這裏是我處理的一般設計:

  • 長壽命的雙向網絡連接。
  • 當用戶與UI進行交互時,請求應通過網絡傳出。
  • 當對所述請求的響應回來時,UI應該被更新 - 異步。
  • 該應用程序將包含多個活動。

這些活動將集中在可用功能的特定領域,所有這些都依賴於相同的底層網絡連接。所以我想要建立這個連接,無論我的應用程序啓動哪個活動,並且在切換到我的應用程序中的另一個活動時都能存活,但是我想在完全切換離開我的應用程序時關閉它。

我想我想要線程。我有一些基本的工作,但不好,因爲我認爲我沒有正確組織它們。到目前爲止,我還無法在用戶界面和網絡線程之間傳遞數據,所以我無法獲取請求,也無法響應。所以我會很感激任何建議。

回答

4

我想我想要線程。

你在這方面沒有選擇。您將需要一個線程來監聽傳入數據的套接字。 Android在這方面與標準Java沒有區別。

我也是,迄今爲止,無法在用戶界面和網絡線程之間傳遞數據,所以我無法獲取請求或響應輸出操作。

那麼,你的線程應該由Service管理。網絡連接支持多種活動,所以沒有任何活動應該擁有該線程。

然後您需要決定網絡連接何時應該存在。由於活動來來往往,因此您需要確定網絡連接是否應該僅在您的某項活動處於前臺時才存在(在這種情況下,您可能會從每項活動中綁定到服務bindService()),或者是否存在顯式的「開始」和「停止」操作,用戶必須這樣做,因此連接可以在所有活動消失後生存(在這種情況下,您可能使用startService()而不是bindService())。

一旦您知道何時以及如何啓動/停止服務,您可以決定該服務如何將其結果反饋給各種活動。有很多選擇,根據你的使用情況,有些比其他選擇更好。註冊聽衆,Messenger,廣播IntentsContentProvider等都是候選人。其中的任何一個都可以被後臺線程使用,並且可以安排將數據傳送到主應用程序線程上的前臺活動。其他活動通常會在onResume()期間刷新其數據,因爲當它們不在屏幕上或者甚至已經被踢出RAM時,主動更新它們通常沒有意義。

IOW,「建議」是一兩本書中的幾章。 :-)

+0

「IOW,」建議「是一兩本書中的幾章。」例如http://commonsware.com/ - 建議。 – RenniePet

相關問題