2013-08-29 80 views
1

我需要打開並保持與服務器的長期連接才能發送消息,並收到響應。有時服務器也會在沒有用戶請求的情況下發送信息,所以android設備應該聽取服務器的反應。與服務器實現長期通信的最佳方式

有AsyncTasks,我可以實現套接字連接,但主要問題是我只知道一種方法 - 發送請求並接收一次響應。然後AsyncTask(和連接)關閉。

我也讀過關於服務(我從來沒有使用過)。

是否可以與保持連接處於活動狀態的服務器建立長期(1-4小時)的連接,偵聽用戶命令(例如,單擊按鈕時需要將數據發送到服務器)並接收來自服務器(然後更改UI)。 當手機入睡,需要更多的內存或其他功能時,服務(和連接)會被終止嗎?電池的成本是很高的嗎?

也許還有其他方法嗎?預先感謝您所有的答案

P.S.遺憾的英語不好,希望大家理解:)

回答

2

您應該使用在後臺運行的Service

另外,您確實不需要通過網絡連接保持服務始終活着。您可以選擇支持2-way communication via the XMPP protocol的Google Cloud Messaging。使用此協議,您可以:

  1. 接收來自服務器的通知,啓動服務並進行必要的處理。
  2. 發送通知到服務器,在哪個服務器上做任何必要的工作。

這些通知是簡短的4kb消息,所以它們最好用作發佈/訂閱模型的「命令」,它可以啓動其他網絡繁重的連接,例如上傳和下載。其餘時間服務可以不活動以減少資源消耗。

+0

不錯,從未使用它。我會檢查並嘗試,因爲減少資源消耗也非常重要。但新組件(Google Messagin服務器)可能需要一些時間才能發送或獲取消息。是否足夠快,因爲我需要即時反應,因爲試圖構建的應用程序,將發送信息到服務器,這將切換電視頻道,音量... – Ragaisis

+0

@Ragaisis即時更新(設備到服務器),你可以直接聯繫服務器,因爲服務器地址通常是相同的。爲了接收設備的信息,您需要依賴GCM,因爲服務器無法找到設備的地址。 –

0

根據Android API Reference
「的服務是可以在後臺執行長時間運行操作的應用程序組件」

而且是它消耗的電池和你必須自己停止: 「重要的是,你的應用程序停止其服務,當它完成的工作,以避免浪費系統資源和消耗電池電量」

所以我覺得服務滿足您的需求。

0

如果您想要將數據發送到服務器時需要與服務器進行通信,您可以執行此操作並等待答案。如果您需要將數據從服務器發送到設備,請查看push notifications

相關問題