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 基於Netty的訊息推送方案之概念和工作原理(二)AndroidNetty
- Android 訊息推送:第三方訊息推送平臺 詳細解析Android
- JavaScript 工作原理之九-網頁訊息推送通知機制JavaScript網頁
- Android 基於Netty的訊息推送方案之Hello World(一)AndroidNetty
- 淺談iOS和Android後臺實時訊息推送的原理和區別iOSAndroid
- 造輪子之訊息實時推送
- Android 之訊息機制Android
- Android 基於Netty的訊息推送方案之字串的接收和傳送(三)AndroidNetty字串
- Android Handler MessageQueue Looper 訊息機制原理AndroidOOP
- Android-Handler訊息機制實現原理Android
- workerman 實現訊息推送
- 實時訊息推送整理
- 搞掂釘釘訊息推送!
- 訊息推送背後的思考
- Flutter websocket 實現訊息推送FlutterWeb
- 番外訊息推送篇_05
- 實時訊息推送方案-SSE
- uni-app訊息推送方案APP
- 小程式訊息推送訂閱
- 玩轉釘釘訊息推送!
- mqtt訊息推送(vue前端篇)MQQTVue前端
- APP訊息推送 極光推送 示例程式碼APP
- 06.Android之訊息機制問題Android
- react-native 使用leanclound訊息推送React
- App訊息推送思維導圖APP
- uni-app小程式訊息推送APP
- .NET對接極光訊息推送
- Android Handler訊息傳遞機制:圖文解析工作原理Android
- Android之Handler訊息傳遞機制詳解Android
- .NET快速對接極光訊息推送
- .NET Core 企業微信訊息推送
- PHP基於Redis訊息佇列實現的訊息推送的方法PHPRedis佇列
- 用 Laravel 自帶訊息模組搭建小程式實時推送訊息Laravel
- 監聽微信公眾號訊息,監聽微信訊息推送
- PHP與反ajax推送,實現的訊息實時推送功能PHP
- Fluter訊息機制之微任務實現原理
- RocketMQ 原理:訊息儲存、高可用、訊息重試、訊息冪等性MQ
- rabbitmq訊息佇列原理MQ佇列