遠(yuǎn)程推送(二): Android 的遠(yuǎn)程推送

上篇文章介紹了iOS 遠(yuǎn)程推送的相關(guān)知識(shí)诺擅,這次來(lái)講講Android 的遠(yuǎn)程推送。

Android 遠(yuǎn)程推送幾種常用的實(shí)現(xiàn)方法

  • 輪詢(Pull):APP 定時(shí)向服務(wù)器發(fā)出請(qǐng)求看是否有新的推送消息
  • SMS(Push):通過(guò)攔截SMS消息獲得推送消息
  • 持久連接(Push):Android 設(shè)備和服務(wù)器建立持久連接,服務(wù)器把消息推送到設(shè)備

輪詢

這個(gè)方式不足的地方還是挺多的,概括有以下幾點(diǎn):

  • 定時(shí)請(qǐng)求,對(duì)性能和電量耗費(fèi)比較大
  • 請(qǐng)求的頻率编检,頻率太低可能導(dǎo)致某些消息的延遲,如果太高扰才,則會(huì)大量消耗流量和電量
  • 必須自己實(shí)現(xiàn)與服務(wù)器之間的通信允懂,例如消息排隊(duì)等

輪詢最主要就是定時(shí)請(qǐng)求,一般就是啟動(dòng)一個(gè)系統(tǒng)進(jìn)程執(zhí)行定時(shí)器隔一段時(shí)間向服務(wù)器發(fā)送請(qǐng)求衩匣,想想如果每一個(gè)APP 都這么干的話蕾总,對(duì)性能和電量耗費(fèi)還是比較大的。而且當(dāng)內(nèi)存不足時(shí)琅捏,Android 操作系統(tǒng)會(huì)殺掉部分系統(tǒng)服務(wù)生百,所以很難保證自己的定時(shí)系統(tǒng)進(jìn)程不被殺死,所以這也是需要考慮的問(wèn)題柄延。
使用 AlarmManager 對(duì)輪詢進(jìn)行優(yōu)化
AlarmManager 是 Android 系統(tǒng)封裝的用于管理 RTC 的模塊蚀浆,RTC (Real Time Clock) 是一個(gè)獨(dú)立的硬件時(shí)鐘,可以在 CPU 休眠時(shí)正常運(yùn)行搜吧,在預(yù)設(shè)的時(shí)間到達(dá)時(shí)市俊,通過(guò)中斷喚醒 CPU。我們可以為自己的APP 設(shè)定一個(gè)在未來(lái)某個(gè)時(shí)間喚醒的功能滤奈,當(dāng)鬧鐘響起秕衙,實(shí)際上是系統(tǒng)發(fā)出了為這個(gè)鬧鐘注冊(cè)的廣播,會(huì)自動(dòng)開(kāi)啟目標(biāo) APP僵刮。這意味著据忘,如果我們用 AlarmManager 來(lái)定時(shí)執(zhí)行任務(wù),CPU 可以正常的休眠搞糕,只有在需要運(yùn)行任務(wù)時(shí)醒來(lái)一段很短的時(shí)間勇吊,執(zhí)行一下我們的請(qǐng)求,然后就可以繼續(xù)休眠了窍仰,從而大大降低了性能和電量的消耗汉规。

SMS

通過(guò)截取SMS 內(nèi)容達(dá)到遠(yuǎn)程推送提醒的目的,因?yàn)镾MS 是實(shí)時(shí)的驹吮,所以這個(gè)方法從時(shí)效性上來(lái)說(shuō)是很好的针史。但是!看到SMS 碟狞,腦海中第一反應(yīng)就是錢(qián)啄枕!然后就是移動(dòng)、聯(lián)通族沃、電信這些運(yùn)營(yíng)商了频祝,畢竟國(guó)內(nèi)想使用免費(fèi)的SMS 不是一件容易的事,所以這個(gè)方法也不是很好脆淹。

持久連接

這個(gè)和iOS 的遠(yuǎn)程推送比較像常空,不過(guò)iOS 是每臺(tái)設(shè)備和APNs 之間只有一個(gè)可靠的長(zhǎng)連接,所有的APP 共同使用盖溺,所以性能上消耗并不是很大漓糙,這點(diǎn)蘋(píng)果做的確實(shí)不錯(cuò)。其實(shí)Google 自家也有類(lèi)似的服務(wù) C2DM烘嘱,不過(guò)國(guó)內(nèi)的情況大家都懂昆禽,所以知道有這么個(gè)事就可以了。
Android 中的持久連接基本都是使用開(kāi)源的 androidpn 實(shí)現(xiàn)的拙友。androidpn 是一個(gè)基于XMPP協(xié)議的java開(kāi)源Android push notification實(shí)現(xiàn)为狸,它本質(zhì)上服務(wù)器端基于 Openfire,客戶端基于 asmack遗契,這二者都最 XMPP IM 開(kāi)源實(shí)現(xiàn)里的二個(gè)基本組件辐棒,應(yīng)該說(shuō) androidpn 只是把二者更多地結(jié)合起來(lái)用于做 Push的場(chǎng)景。XMPP牍蜂、IM 這些大家都知道更多的是用在即時(shí)通信方面的漾根,XMPP 的協(xié)議都是在xml 上實(shí)現(xiàn)的,xml 相對(duì)于客戶端二進(jìn)制流和JSON 來(lái)說(shuō)有點(diǎn)臃腫鲫竞、靈活性比較差辐怕,這樣會(huì)導(dǎo)致客戶端的耗費(fèi)更多的流量和電量,這個(gè)肯定是用戶不愿意看到的从绘。另外就是單機(jī)并發(fā)很有限寄疏,集群方案不成熟是牢,代碼古老而缺乏及時(shí)更新。

總結(jié)一下以 androidpn 為典型的開(kāi)源 Android Push 方案會(huì)存在的問(wèn)題:

  • 容量大了開(kāi)源服務(wù)器實(shí)現(xiàn)頂不住陕截,還是需要自己去改進(jìn)開(kāi)源實(shí)現(xiàn)驳棱,或者完全重新用新方案,開(kāi)發(fā)投入與高成本是不可避免的农曲。
  • 協(xié)議與實(shí)現(xiàn)上如流量消耗社搅、網(wǎng)絡(luò)連接策略等,不是專門(mén)為移動(dòng) Push 優(yōu)化過(guò)的乳规,是不經(jīng)濟(jì)的形葬。

其他的選擇:第三方推送

目前第三方的推送比較成熟了,極光暮的、百度云推送笙以、個(gè)推等等。如果不是特別的需求青扔,使用第三方推送服務(wù)是一個(gè)比較好的選擇源织,可以省去很多功夫。

參考

  1. Healtheon 大神的:Android實(shí)現(xiàn)推送方式解決方案
  2. 極光推送博客:Android Push 開(kāi)源方案解析
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末微猖,一起剝皮案震驚了整個(gè)濱河市谈息,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凛剥,老刑警劉巖侠仇,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異犁珠,居然都是意外死亡逻炊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)犁享,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)余素,“玉大人,你說(shuō)我怎么就攤上這事炊昆〗暗酰” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵凤巨,是天一觀的道長(zhǎng)视乐。 經(jīng)常有香客問(wèn)我,道長(zhǎng)敢茁,這世上最難降的妖魔是什么佑淀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮彰檬,結(jié)果婚禮上伸刃,老公的妹妹穿的比我還像新娘谎砾。我一直安慰自己捧颅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布隘道。 她就那樣靜靜地躺著,像睡著了一般谭梗。 火紅的嫁衣襯著肌膚如雪捞稿。 梳的紋絲不亂的頭發(fā)上把敢,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天凄吏,我揣著相機(jī)與錄音远舅,去河邊找鬼。 笑死图柏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的任连。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼随抠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼裁着!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拱她,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤二驰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后秉沼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體桶雀,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年氧猬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了背犯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盅抚,死狀恐怖漠魏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妄均,我是刑警寧澤柱锹,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布哪自,位于F島的核電站,受9級(jí)特大地震影響禁熏,放射性物質(zhì)發(fā)生泄漏壤巷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一瞧毙、第九天 我趴在偏房一處隱蔽的房頂上張望胧华。 院中可真熱鬧,春花似錦宙彪、人聲如沸矩动。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悲没。三九已至,卻和暖如春男图,著一層夾襖步出監(jiān)牢的瞬間示姿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工逊笆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栈戳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓览露,卻偏偏與公主長(zhǎng)得像荧琼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子差牛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容