2011-01-05 67 views
3

最近谷歌推出了推送設備服務,但它只能使用2.2及更高版本。使用http時的Android電池

我需要一個類似的系統,在我的應用程序,而我試圖繞過限制。

問題是電池壽命。由於必須立即通知用戶有關服務器上的更改,因此我認爲要實施一項將位於後臺的服務(標準Android服務)並向服務器查詢更新。

當然,查詢服務器,甚至每秒都會花費很多帶寬和電池,所以我的問題是這樣的:如果服務器在一段時間內持有響應,它是否會產生影響? (後面的彗星式Ajax請求的想法)

是這樣工作的:

  • 設備發送數據更新請求
  • 服務器收到請求,並在循環將持續一分鐘,如果有檢查更新在每次迭代時
    • 如果有更新,服務器將更新發送回應
    • 如果沒有更新,服務將繼續進行下一次迭代。
  • 一分鐘後,它最後發送沒有數據尚未提供
  • 響應(不管空的或用數據是否)的Android觸發另一個這樣的請求之後的響應。

它肯定會花費更少的帶寬,但它會消耗更少(甚至更多)的電池嗎?

回答

2

拿着TCP套接字(因此等待一個HTTP響應),你的建議很可能將是你最好的選擇。你所描述的實際上已經通過HTTP延續請求來實現。看看HTTP推送通知的Bayeux protocol。另外,請查看Android實施here.對於它的價值,這絕對是我會用的。我沒有做過任何類型的分析,但是這可以讓您儘可能長地掛起連接,從而最大限度地減少通過線路傳輸的數據量(這與數據消耗成正比)。

簡而言之,Bayeux的工作方式與您的建議非常相似。客戶端打開一個請求,服務器等待它。如果它有東西要發送,它會發送它,否則它只是等待。最終,請求會超時。此時,客戶提出另一個請求。你所獲得的是從服務器接近瞬間推送到客戶端,而不需要持續輪詢和重複HTTP頭等信息。

1

當手機正在使用該網絡,它的電池使用較多。也就是說,它何時發送請求以及何時收到響應。它也將通過聽取回應來使用電池。但是,手機會下載數據,檢查是否有迴應?或者手機是否會開放以接收它,服務器會將響應推送給手機?這主要取決於它。如果手機只是在接收響應時打開,但實際上並未在使用網絡的同時嘗試下載某個響應,但它應該等待的時間應該是這樣,它應該使用較少的電池。

此外,該手機發送一個查詢,而不是每一秒的每一分鐘絕對使用較少的電池,只要使用網絡去。然而,這取決於你如何讓手機保持,如果你把它與非常複雜的邏輯聯繫起來等待它可能無助於電池壽命。但是,情況可能並非如此,我想說這很可能會爲你解決。

最後,它應該幫助電池,但也有,你可以讓它在它不會方式。編寫程序並不會造成什麼影響,然後只需更改某種類型的變量(例如WAIT_TIME爲1秒而不是1分鐘),然後測試電池的使用情況,是嗎?

+0

謝謝你的迴應。我想寫一個示例應用程序,而且我會在不久的將來做到。 關於請求。 這只是一個簡單的請求,如http://someserver.com/getdata 然後,設備正在等待響應,如果數據可用,那麼它立即得到響應,或者在一段時間內(不到一分鐘) ,否則它只是等待,而主要的東西正在服務器上發生。 – 2011-01-05 15:41:40