Android之訊息推送原理
本文配套視訊
訊息推送原理
a) 傳統獲取伺服器資料使用的是pull模式,是客戶端向伺服器請求資料。從客戶端發起連線請求,獲取到伺服器資料後就關閉連線。當連線斷開後,伺服器就會失去客戶端的地址,因此無法主動向客戶端傳送訊息。
b) 推送(push)是服務主動向客戶端傳送資料。
它的原理是保持一個長連線,當客戶端和伺服器建立連線後不再斷開,這樣伺服器隨時有新訊息都可以傳送給客戶端。
長連線和短連線。所謂長連線,指在一個TCP連線上可以連續傳送多個資料包,在TCP連線保持期間,如果沒有資料包傳送,需要雙方發檢測包以維持此連線。
while(true) {
request(timeout);
request(timeout);
}
短連線是指通訊雙方有資料互動時,就建立一個TCP連線,資料傳送完成後,則斷開此TCP連線,即每次TCP連線只完成一對
c) 至於如何獲取推送訊息。由於服務端傳來推送訊息的時間是不確定的,這裡只能等待推送SDK的回撥,比如通過註冊監聽或者廣播接收者。不同的廠商的推送SDK可能會有不同的處理方案,以百度推送SDK來說,是通過廣播接收者獲取推送資料。
簡要說明一下openfire、smack、spark
openfire是基於XMPP協議的即時通訊的伺服器端的一個實現,你不需要編寫一行服務端的程式碼,實現一個簡單的點對點通訊或是簡單的群聊.
smack 是XMPP傳輸協議的Java實現,提供了一套API介面 可以連線服務端。一般用於快速開發手機客戶端。
spark是基於smack實現的一個XMPP即時通訊客戶端(PC端的)。
幾種常見的解決訊息即時獲取方案
-
輪詢(Pull)方式:客戶端定時向伺服器傳送詢問訊息,一旦伺服器有變化則立即同步訊息。
-
SMS(簡訊訊息)(Push)方式:通過攔截SMS訊息並且解析訊息內容來了解伺服器的命令,但這種方式一般使用者在經濟上很難承受。
-
持久連線(Push)方式:客戶端和伺服器之間建立長久連線,這樣就可以實現訊息的及時行和實時性。
Timer比AlarmManager實現心跳時更耗電原因
一. Timer
Android 的 Timer 類可以用來計劃需要迴圈執行的任務。
Timer 的問題是它需要用 WakeLock 讓 CPU 保持喚醒狀態,這樣會大量消耗手機電量,
大大減短手機待機時間。這種方式不能滿足我們的需求。
二. AlarmManager
AlarmManager 是 Android 系統封裝的用於管理 RTC 的模組,RTC (Real Time Clock) 是一個獨立的硬體時鐘,可以在 CPU 休眠時正常執行,在預設的時間到達時,通過中斷喚醒 CPU。這意味著,如果我們用 AlarmManager 來定時執行任務,CPU 可以正常的休眠,只有在需要執行任務時醒來一段很短的時間。
轉自:https://www.jianshu.com/p/d88dc66908cf
相關文章
- Android訊息推送技術原理分析和實踐Android
- iOS開發訊息推送原理iOS
- Android 基於Netty的訊息推送方案之概念和工作原理(二)AndroidNetty
- JavaScript 工作原理之九-網頁訊息推送通知機制JavaScript網頁
- iOS 訊息推送原理及實現DemoiOS
- Android 訊息推送:第三方訊息推送平臺 詳細解析Android
- 基於xmpp openfire smack開發之Android訊息推送技術原理分析和實踐[4]MacAndroid
- Android 基於Netty的訊息推送方案之Hello World(一)AndroidNetty
- Android的訊息機制之ThreadLocal的工作原理Androidthread
- 史上最全解析Android訊息推送解決方案Android
- 淺談iOS和Android後臺實時訊息推送的原理和區別iOSAndroid
- Android 推送訊息的實現,使用百度雲推送Android
- Android訊息傳遞之Handler訊息機制Android
- Android 之訊息機制Android
- android之 Android訊息機制Android
- android個推訊息推送,asp.net呼叫介面AndroidASP.NET
- workerman 實現訊息推送
- IOS 訊息推送處理iOS
- Android訊息傳遞之元件間傳遞訊息Android元件
- 深入理解 Android 訊息機制原理Android
- IOS 推送訊息 php做推送服務端iOSPHP服務端
- uni-app訊息推送方案APP
- 訊息推送背後的思考
- mqtt訊息推送(vue前端篇)MQQTVue前端
- 玩轉釘釘訊息推送!
- Flutter websocket 實現訊息推送FlutterWeb
- 微信開發推送訊息案例
- 使用redis進行訊息推送Redis
- 訊息推送系統架構架構
- 實時訊息推送方案-SSE
- 小程式訊息推送訂閱
- Android 基於Netty的訊息推送方案之字串的接收和傳送(三)AndroidNetty字串
- APP訊息推送 極光推送 示例程式碼APP
- Android-Handler訊息機制實現原理Android
- Android Handler MessageQueue Looper 訊息機制原理AndroidOOP
- uni-app小程式訊息推送APP
- App訊息推送思維導圖APP
- 深入理解Android訊息佇列原理篇Android佇列