揭祕:智遊推送技術原理

 

智遊推送技術原理java

 

爲何使用推送:android

如今的大多數移動端應用都有實時獲得消息的能力,簡單來講,有發送消息的主動權和接受消息的被動權。例如:微信,QQ,天氣預報等等,對於用戶體驗和好處不用多言。服務器

移動應用互聯網特色:微信

 

由於手機平臺自己、電量、網絡流量的限制,移動互聯網應用在設計上跟傳統 PC 上的應用很大不同,須要根據手機自己的特色,儘可能的節省電量和流量,同時又要儘量的保證數據能及時到達客戶端。網絡

爲了解決數據同步的問題,在手機平臺上,經常使用的方法有2種。一種是定時去服務器上查詢數據,也叫Polling,還有一種手機跟服務器之間維護一個 TCP 長鏈接,當服務器有數據時,實時推送到客戶端,也就是咱們說的 Pushspa

從耗費的電量、流量和數據送達的及時性來講,Push 都會有明顯的優點,但 Push 的實現和維護成本相對較高。在移動無線網絡下維護長鏈接,相對也有一些技術上的難度。本文試圖給你們介紹一下我在 Android 平臺上是如何維護長鏈接。設計

智遊推送如何實現高效穩定且低消耗的推送功能同步

移動無線網絡的特色:it

由於 IP v4 的 IP 量有限,運營商分配給手機終端的 IP 是運營商內網的 IP,手機要鏈接 Internet,就須要經過運營商的網關作一個網絡地址轉換(Network Address TranslationNAT)。簡單的說運營商的網關須要維護一個外網 IP、端口到內網 IP、端口的對應關係,以確保內網的手機能夠跟 Internet 的服務器通信。io

 

NAT 功能由圖中的 GGSN 模塊實現。

大部分移動無線網絡運營商都在鏈路一段時間沒有數據通信時,會淘汰 NAT 表中的對應項,形成鏈路中斷。

PushAndroid平臺上的實現

既然咱們知道咱們移動端要和Internet進行通訊,必須經過運營商的網關,因此,爲了避免讓NAT映射表失效,咱們須要定時向Internet發送數據,來保持NAT映射表的活性。

這時候就須要用到定時器,在Android上定時器一般有如下兩種:

java.util.Timer

android.App.AlarmManager

分析:

Timer:能夠按照計劃或者時間週期來執行相關的任務。可是Timer須要用WakeLock來讓CPU保持喚醒狀態,才能保證任務的執行,這樣子會消耗大量電量;當CPU處於休眠的時候,就不能喚醒執行任務,因此應用於移動端明顯是不合適

AlarmManager:AlarmManager類是屬於android系統封裝好來管理RTC模塊的管理類。這裏就涉及到RTC模塊,要更好地瞭解二者的區別,就要明白二者真正的區別。
  RTC(Real- Time Clock)實時鬧鐘在一個嵌入式系統中,一般採用RTC 來提供可靠的系統時間,包括時分秒和年月日等;並且要求在系統處於關機狀態下它也可以正常工做(一般採用後備電池供電),它的外圍也不須要太多的輔助電路,典型的就是隻須要一個高精度的32.768KHz 晶體和電阻電容等。(若是對這方面感興趣,能夠本身查閱相關資料,這裏就說個大概)
好了,回來正題。因此,AlarmManager又稱全局定時鬧鐘。這意味着,當我用使用AlarmManager來定時執行任務,CPU能夠正常地休眠,只有在執行任務是,才喚醒CPU,這個過程是很短期的。

在推送中使用AlarmManager來實現心跳的功能,使其真正的實現長鏈接,且以最低的消耗。

相關文章
相關標籤/搜索