2012-08-12 76 views
0

我正在構建一個Android應用程序,它將通過TCP與服務器進行通信。我有一些實施的想法,我不知道哪一種方式最好。我是新手,我的設計在學習新事物時不斷髮展,所以現在我正在尋求如何最好地實施解決方案以實現我的目標的建議。Android Keep線程問題

目標:能夠:

  1. 將數據發送到服務器
  2. 將數據發送到服務器和讀取服務器響應。

    • 我發送的一些信息是給服務器的信息,其他的是從服務器請求信息。

可能的實現:

  • 線程的run()方法不斷地通過檢查,如果我發送隊列中有東西送(發送它,如果它)循環再檢查,如果我有什麼關係讀回來。
    • 這會耗盡電池/燒壞CPU嗎?
  • 創建一個新的線程我想發送/接收各一次,讓它死一次我做了「發送」或「發送+接收」
    • 我應該如何與我的一個同步線程交互插座?阻止製作下一個線程,直到完成這個線程?
  • 讓一個線程,並調用發送或發送+接收方法withing線程每次我需要寫或寫+讀
    • 如何保持線程活着不燃燒電池/ CPU?
    • 我應該使用一個隊列來處理傳輸數據的請求,並且我應該同步從它讀取,直到當前讀/寫完成?

任何額外的指針,鏈接,或潛在問題的警告,將不勝感激。示例代碼尤其值得欣賞,因爲我剛開始使用它。謝謝。

回答

2

正如你所指出的,有幾種方法可以達到這個目的,它們每個都有其優點和缺點。

讓連接處於打開狀態,或者經常重新發送它們肯定會影響電池使用時間。如果這是你的情況,我會考慮每隔一段時間將一些請求分配到一個請求中。這裏有一個有趣的article

我前幾天寫過關於我經常使用的方法,它工作得非常好。它可以像看起來一樣簡單,也可以爲Android應用程序的整個API通信引擎設置基礎。這取決於您的需求。它基本上是在後臺線程池中執行請求,由服務控制並在您的活動或任何您需要的內容中通知。 每當你需要推送一個新的請求時,它就像排隊和設置回調一樣簡單。 如果你認爲這可能適合你,我給你留下一對深入探討的鏈接。

http://ugiagonzalez.com/2012/07/02/theres-life-after-asynctasks-in-android/ http://ugiagonzalez.com/2012/08/03/using-runnables-queues-and-executors-to-perform-tasks-in-background-threads-in-android/

希望它能幫助。

+0

謝謝!您的鏈接讓我在android dev網站上「使用Google Cloud Messaging作爲輪詢的替代選擇」,這似乎對我非常有用,因爲我將更新以非常頻繁地查看我的服務器的當前狀態(狀態更改在使用中平均每200-4000毫秒)。如果我將您的建議與您的鏈接發送給我的內容結合起來,我應該能夠提出一個好的解決方案。 – Nissi 2012-08-13 01:29:11

+0

那麼,使用推送是其中的建議之一,但無線電系統如何在Android中工作的整個背景對我來說非常寶貴。 讓我跟上你的進步。 – 2012-08-13 10:41:52

+0

是的,您鏈接的其中一頁介紹了收音機的工作方式,並且在每次使用後它會保持充分供電約20秒。應用程序的進展可能會有點慢,因爲這是一個概念驗證項目,我的其他工作必須優先考慮。也就是說,我會繼續保持最新,因爲我前進。如果我現在想做一個「快速和骯髒」的實現,那麼在我運行應用程序後重構更可靠+更好的電池和CPU使用率,你認爲我的一個原創想法是否比其他創意更好? – Nissi 2012-08-13 12:28:46