我即將在2017.7.8號開一個直播講堂,感興趣的同窗點擊快來參加吧:https://segmentfault.com/l/15...
內容包括:android
Android 知識體系分享面試
從入門到提升的學習路徑segmentfault
如何進一步突破瓶頸,進一步提高服務器
充足的時間和你們討論,回答你們問題微信
自我介紹:框架
網易 Android 專家工程師,網易雲音樂 Android 負責人,主導從零開發了網易雲音樂 Android
客戶端,目前是杭州研究院專業委員會成員,負責每一年的評級,規範起草,面試招聘等相關工做。參與並製做了網易雲課堂 Android
微專業相關課程,反響不錯。學習
第一篇文章咱們先來聊聊「Android我還能夠相信你多少」,在Android系統版本的碎片化之下,在國內百家爭鳴的廠家定製rom修改之下,做爲一個開發者在選用系統組件的時候應該如何抉擇?google
每當想起這個話題的時候,老是略帶一些沮喪。系統的組件都不靠譜,倒逼着開發者重複造輪子,浪費時間是其一,參差不齊的實現和激烈的資源競爭都是致使Android平臺App質量不高的緣由之一。不過這倒催生了一系列優秀的開源項目,只要你想獲得基本上均可以在開源平臺上面搜獲得。隊列
首當其衝的應該算推送。推送做爲拉回流失,提升活躍的重要手段基本上每一個App都是標配。但無奈GCM依賴google服務框架,國內手機系統基本都被閹割,直接致使官方系統級推送服務撲街。因而演變出了不少變種,每一個廠家自研一套,好比小米,華爲都是對外公開。有的廠家是有自建推送到未普及到普通應用開發者,好比 oppo,vivo。小衆一點廠家可能都尚未實現。除了廠家實現的系統級推送,也有不少第三方軟件公司實現的方案,好比個推,極光。甚至還有像友盟這種的打包方案:會根據手機品牌來進行適配優先選擇系統級推送,並以其餘推送做爲輔助來提升消息到達率。這種作法在實現推送服務的時候很常見,不少App都會接入不止一個推送SDK,所作的一切就是爲了儘量的提升消息到達率。資源
除了推送,定時輪詢也算是另一種解決方案,適合實時性要去不高接入推送成本又偏高的應用
事實上由於沒有統一的推送平臺,只靠接入一家推送服務都沒法在如今的國內環境下面保證到達率。隨着廠家對功耗限制的愈來愈嚴格,程序在後臺存活的機率愈來愈小,要是利用不了系統級推送服務被殺以後基本沒有機會。因而乎又衍生出了另一種喚醒服務,也即接入某種推送平臺的SDK以後,一個程序啓動了就會拉起另一個程序運行,這樣即便沒有系統級服務也能夠繼續收發消息。但道高一尺魔高一丈,廠家發現這種行爲後紛紛亮出大招,好比禁止使用startService喚起一個死掉的程序,同時還在通知欄來個提醒:已禁止A程序後臺啓動B程序。開發者被逼上了絕路。關於喚醒還有另一種變種,就是消息通道複用,也即A程序起來以後也能夠代收一樣使用這個推送平臺的其餘程序,這樣就不存在喚醒但同時能夠收發更多程序消息。這種實現系統很難禁止,惟一的缺點就是流量功耗都會算到A程序上面,或許推送開發者又要進行一輪修改了。
一個App保持了不少條長連接,App之間反覆被喚醒,輪詢頻率過快都是致使手機變卡,耗電嚴重的重要緣由。
推送服務選擇的原則最重要的就是要選有系統級推送且市場佔有率大的廠家。根據咱們的經驗同時接入小米和華爲,在華爲手機上面走華爲推送,在其餘手機上面走小米推送。oppo,vivo市場佔有率很高,但無奈推送服務還不成熟,據小道消息還要在通知欄上面作競價排名?小米推送比較成熟,服務器也比較穩定,接入也很簡單,華爲推送由於某些舊版本系統存在bug致使到達率會有一些損失。個推聽說留有後門能夠動態執行。在推送實現上面也能夠採用幾個推送平臺服務端同時下發,客戶端進行過濾去重的實現。能夠根據本身須要來進行選擇。
還要警戒的是,接入推送以後有可能存在消息延遲,這徹底依賴於推送服務提供商的後臺服務。消息從咱們服務器發到推送平臺以後進入處理隊列,最後真正推到客戶端的時間是不肯定的,因此客戶端要儘可能有延遲容忍能力。話說回來,除了個別推送(好比個推),其餘都是免費提供服務,你還能要求咋樣?
更多推送平臺的對比網上也有不少參考文章,你們能夠搜索:android推送對比 進行查看,這裏有篇對比文章可供參考:http://www.jianshu.com/p/d650...
更多文章請關注微信公衆號:anzhuozhimei