我一直在對使用持久套接字的Android設備的自定義推送通知解決方案進行一些測試。我想分享我的發現並驗證結果。Android持久套接字連接規則
簡單說明
的應用程序運行的前景服務並建立與服務器的連接,並認爲通過積極的爆震連接(@ 10秒間隔)。如果連接被檢測爲死亡,應用會一直嘗試無限期地重新連接。服務器通過雙工通道發送通知。
測試1:
Pinging is done using a timer at 10 second intervals.
Server sends notification every minute.
Applications acquires wifi and wake locks.
Duration : 8 hours
Battery loss : ~14%
試驗2:
Pinging is done using AlarmManager at 10 second intervals.
Server sends notification every minute.
Application acquires only a wifilock
Duration : 8 hours
Battery loss : ~7%
假設:傳入的網絡分組自動喚醒CPU,因此,不需要喚醒鎖。使用AlarmManager來ping(而不是定時器)意味着我們不需要喚醒鎖。
刪除那個喚醒鎖確實有助於電池。令人驚訝的是,任何一種解決方案的攻擊性ping都不會像我預期的那樣影響電池壽命。 (我們進行了許多其他測試,其中包括應用程序剛剛安裝了wifilock,並且在同一時間段內沒有任何操作導致電池損耗大約爲4%至5%)
由於應用程序能夠成功發送所有ping請求,接收所有傳入的消息,我相信我的假設是正確的。但我很想得到任何專家的確認。
還有一個問題: 如果應用程序是要監聽傳入連接。在這種情況下,我需要保持一個喚醒鎖,對嗎?傳入的連接不會喚醒CPU?我們不會走這條路,但只是想確認一下。
另外,請不要推薦GCM,它已被公司政策排除。
謝謝。
爲什麼你讓移動平安,如果你有套接字連接?爲什麼不僅讓服務器發送信息,實際上有什麼話要說,有時候還可能有心跳來保存它。 – 2013-10-03 07:40:13
在我們的例子中,連接可以在幾個開關之間。我們需要儘快確定無效連接。因此,對於移動客戶端的每次ping,服務器都必須作出響應。它保護我們免受無聲斷線。 – Alex 2013-10-07 14:43:09
我確定在這裏有一個很好的問題,但我無法找到它目前的形式如果你仍然在尋找答案,你可以考慮編輯一個更具針對性的問題。 JMHO :-) – Chilledrat 2013-10-16 08:42:16