摘要:超過百萬個安卓APP拼搶30億部安卓終端,安卓世界的微觀博殺已經到了近乎殘酷的地步。不了解不知道,一了解就嚇一跳。
安卓世界的競爭一向是異常激烈的。根據Talkingdata最新的2016年9月監(jiān)測數據,中國現有移動智能終端41億多部,其中70%是安卓設備。而早在2012年的時候,全球安卓APP應用商店里的APP數量就已超過了100萬個,如今規(guī)模又進一步擴大到150萬個左右。這么多的安卓APP在拼搶接近30億部安卓終端,APP之間的微觀博殺已經到了近乎殘酷的地步。
除了拼搶市場、擴大用戶數量外,如何提升用戶的日活躍度和粘性,也是安卓APP的存活之道。對于移動APP來說,即時消息IM功能正變得越來越重要:推送消息能刷出APP的存在感;IM能強化人與人之間的連接,在社交類產品中的用戶與用戶間溝通可以產生出更好的粘性。因此,在提升用戶日活和粘性方面,即時消息IM的穩(wěn)定性與可靠性非常重要。
不了解不知道,原來安卓后臺無時無刻不上演各APP之間拼搶系統(tǒng)和網絡資源、用各種方法絞殺其它APP的即時消息,從而提升自己存活機會的微觀大搏殺!究竟這個大搏殺激烈到什么程度,在這個大搏殺中的存活絕招有哪些?
微觀搏殺之“內存殺手”
對于iOS來說,有 APNS服務做消息推送,系統(tǒng)相當穩(wěn)定。對安卓本身來說,在國外也有Google的GCM服務可用,但在國內卻無法使用Google的服務。對于IM來說,當APP應用退到安卓后臺系統(tǒng)后,還必須能夠收到新消息提醒的。沒有GCM,怎么辦?
在最開始的時候,唯一能做的就是保持APP的后臺運行了。但其實手機等設備的內存是拒絕后臺運行APP的,后臺運行了太多的APP會導致應用卡頓、不斷耗電、系統(tǒng)性能下降等問題。因此,安卓系統(tǒng)對于后臺運行的APP也不會放任自流。但后臺運行,卻是保持IM推送的幾乎唯一也是最主要的途徑。
APP想要在后臺保持運行,需要面對不少“殺手”。第一大殺手就是安卓的Low Memory Killer(LMK,“低內存殺手”)機制。因為手機的內存畢竟有限,當后臺運行的進程越來越多,內存剩余量也就隨之減少。當有一個新的APP想要啟動,而如果此時內存不夠了,LMK機制就會啟動,從正在運行的APP進程中挑選一個清理掉,釋放出空間。
LMK有兩個尺度去評判要“殺掉”哪個在后臺運行的APP進程。一個是APP進程優(yōu)先級,優(yōu)先級越低,被清理的可能性越大;另一個是內存占用,占的內存越多,被清理的權重自然也越大。
微觀搏殺之“用戶的劍”
除了系統(tǒng)LMK能夠殺掉后臺運行的APP進程外,用戶也一樣可以殺死進程。
用戶殺掉進程的方式有兩種,一種是在最近任務列表中將APP劃掉,這種方式和系統(tǒng)殺掉進程效果相同。另外一種就是通過Force Stop“強制停止”,這種方式比系統(tǒng)清理更加徹底。不但正在運行的APP進程會被清理,APP在重啟列表中的待重啟服務、注冊的各種鬧鐘、事件監(jiān)聽組件等都會被移除,除非用戶再主動點擊或者系統(tǒng)重啟等外力,APP沒法再自己重新“爬”起來了。
此外,國內MIUI一類的ROM上,用戶從最近任務列表中將APP移除,效果竟然也是Force Stop“強制停止”。正常來說,如果是用戶主動操作,APP本身也不應該再重啟了。但有些時候這并非用戶本意,而且對于IM功能來說,一定要保障消息推送,否則會被不明就里的群眾誤認為軟件本身有問題。
微觀生存之“全家桶”
在目前國內的Android生態(tài)環(huán)境中,無論采用什么方式,想要一直在后臺保持APP的運行越來越難了。
為了“生存”,當一個APP進程起來后,就去掃描已安裝的應用列表,看看有沒有自己的“同源兄弟姐妹”,比如集成了同一個SDK(開發(fā)工具包)的APP等,如果有的話就把這些APP“抱團”起來,互相?;?、互相喚醒。這就是現在比較出名的“全家桶”方案。
雖說這種方法確實能夠帶來較高的后臺存活率,特別是那些大廠和應用廣泛的SDK。如果有后臺推送的必要性,而且不會對用戶體驗造成太大傷害時,此方式還可以使用。但如果只是為了推廣告,則會對用戶造成傷害,反過來也可能會導致用戶直接卸載APP。
因為“全家桶”實在是太令人討厭,現在各種手機管理軟件都會對這種喚醒方式做限制,特別是在root過的機器上,可以做到完全切斷這些喚醒路徑。同時,很多手機的ROM(只讀存儲器,帶有系統(tǒng)重啟軟件包)也會自帶管理軟件,限制后臺運行和后臺喚醒,以便給設備換取更長的續(xù)航。
微觀生存之“共享心跳”
傳統(tǒng)上,每個IM客戶端都會各自維護一條與服務器的長連接,各自的消息和信令都在這條長連接上傳遞,每個APP也獨自發(fā)送“心跳”信息、斷線重連等事情。
所謂“心跳”機制,最早用于服務器的安全備份,為了防止服務器死機而在服務器之間周期性傳送簡短的“心跳”信息,一旦收不到對方的“心跳”信息,服務器可以接管對方的業(yè)務,避免業(yè)務的停滯。到了手機上,無論是安卓的原生應用,還是QQ、微博和微信,都采用了心跳機制,也就是APP終端定時向應用服務器發(fā)送簡短的信息。
各自獨立“心跳”的話,不同APP之間完全隔離、不會互相影響。但缺點也非常明顯,首先是做了很多重復的工作,造成了流量和電量的無謂消耗,第二是要保證所有的進程都能在后臺運行確實很艱難。
所謂“共享連接”,就是從眾多APP里面選出一個當前正在運行的,或者是被殺概率最低的APP作為總代理,由這個代理和服務器建立連接,手機上的所有其他APP都通過這個代理中轉與服務器通信。所有APP的消息都經過代理中轉,代理到服務器的連接是加密的,但到了代理這里理論上可以看到其它所有APP的來往消息。因此,這種共享長連接的方式并不適用于IM。
存活絕技之“獨行俠”與“影子武士”
周江華是網易資深安卓開發(fā)工程師,先后主導參與了易信、網易云信、網易七魚的客戶端開發(fā)工作,擁有非常豐富的功能開發(fā)以及代碼優(yōu)化經驗。2016年9月23日,MDCC 2016中國移動開發(fā)者大會上,周江華介紹了網易云信IM在應對弱網環(huán)境、移動端硬件限制以及Android復雜的生態(tài)現狀時的探索與心得。
周江華介紹說,雖說APP終究免不了一死,但通過對照LMK的評判準則,還是可以降低APP被清理的概率。第一個就是降低APP進程的內存占用。如果采用單進程的模式,由于進程中包含了UI、Webview、圖片緩存等內容,內存占用必然會居高不下。因此,IM軟件一般都會采用雙進程甚至多進程的策略,將push進程獨立出來——在push進程里只處理網絡連接和push業(yè)務,不參與任何其他業(yè)務邏輯,更不包含任何UI。這有些“獨行俠”的意思。
網易云信Android SDK架構
上圖為網易云信Android SDK架構,按照分層的結構模式設計。最底下為push層,就是作為一個獨立進程運行,只負責處理網絡長連接的相關工作,比如安全加密、心跳、鑒權、封包、解包等工作,所有業(yè)務邏輯都交給UI進程的服務模塊去做。再看一下云信demo的進程內存占用情況,push進程的內存占用只有10M左右。因此,當處于后臺時,push進程被清理概率比UI主進程低很多。
降低被清理概率的第二個手段是提升進程優(yōu)先級。實際上,安卓的前臺服務設計上有一個漏洞,通過兩個服務的配合就能創(chuàng)建一個隱形的前臺服務。也就是啟動兩個服務進程,每一個都賦予了同樣的進程ID,但在常駐通知欄中只有一個相應的進程ID,這樣一旦系統(tǒng)關掉一個進程ID的時候,盡管“殺掉”了一個前臺服務和相應的常駐通知欄進程,但還有一個隱形的服務仍在存在而且不會受到任何影響。這種“影子武士”的好處是,用戶不會有任何感知,但仍然能獲得“幕后”的消息保護。
存活絕技之“龍威鏢局”
前面提到了共享長連接的方式并不適合IM,但適當的優(yōu)化仍然可以保障IM,這就是脫敏共享連接的方式:安全長連接加推送連接模式。
所謂“安全長連接加推送連接模式”就是每個APP在使用和真正傳遞數據時,仍然獨立使用自己的安全長連接,而當APP退到后臺一段時間后則斷開長連接,然后開啟一個推送代理,選擇其中一個與云信的推送服務器建立連接。之后當APP有新消息時,就通過這個推送連接傳遞。這種情況下,APP可以控制發(fā)出的推送消息的安全級別。這種代理機制相當于給APP的消息傳遞找到了一個“鏢局”,既保證了消息的安全性,又保證了傳送的效率。
采用代理連接的方式,當推送消息到達后臺,如果是代理APP自己的消息就直接傳遞給APP即可,如果是其他APP消息,就發(fā)出一條通知欄提醒,等用戶點擊通知欄提醒后,才會把目標APP喚醒。之所以通過通知欄提醒而不是直接喚醒APP,一方面是因為直接喚醒可能會失敗,另一方面是如果喚醒而不使用就會導致無謂的電量消耗。
此外,現在國內的ROM中,華為和小米的操作系統(tǒng)自帶推送系統(tǒng)且開放給了第三方APP。在華為和小米的系統(tǒng)中,使用系統(tǒng)自帶的推送通道會更穩(wěn)定、也更節(jié)省資源。因此在MIUI上,從長連接到推送通道的切換流程仍然和前述一樣,只是把消息轉發(fā)到MIUI的推送服務器,然后再傳遞給云信的APP,華為的推送系統(tǒng)流程也是一樣。
不過華為和MIUI在推送的實現上略有區(qū)別,MIUI的通知欄提醒是在系統(tǒng)的推送代理里完成,而華為卻是將提醒通知交給APP去完成。另外,它們系統(tǒng)通知欄提醒的管理接口也有區(qū)別,在APP沒有被禁用的情況下,兩者都可以收到推送,而如果APP已經被禁用了,MIUI的通知欄提醒方式還可以將推送送達,而其它的推送方式則不能送達了。
突破弱網環(huán)境的三大限制
相對于PC的網絡環(huán)境,周江華總結手機網絡有3個特點:第一個是慢,尤其是2G、3G網絡,慢的令人發(fā)指;其次是斷,手機跟著人不停的移動,網絡也不停的在切換,從wifi到移動網絡、從一個基站到另一個基站、從有信號到沒信號,都可能導致網絡中斷;第三是貴,只要看中國移動每天凈賺一個億就知道了。
在網易云信整個通信系統(tǒng)中,有三種類型的連接,即TCP、UDP和HTTP。三種類型的協議對應了不同的業(yè)務應用:TCP主要是用戶長連接,也就是普通IM消息和信令的傳輸;UDP用于傳輸實時音視頻數據流;而HTTP則主要用在音頻、圖片等文件的上傳下載上。
對于長連接,可以采用開源協議,有成熟的解決方案、擴展性好、可讀性好,甚至還可以和其它系統(tǒng)互聯互通,但問題是協議文本普遍比較臃腫、冗余字段很多,在昂貴的移動網絡里自然就成本比較貴。網易云信采用的是私有的二進制協議,以“0/1”方式表達的二進制協議完全失去了可讀性,但卻帶來極高的表達效率,相對于文本協議可以節(jié)省非常多的數據流量。此外,在判斷LBS地址、發(fā)出登錄請求、建立安全連接的協議握手等,可以通過并行和增量操作的方式,把登錄時間降為原來的1/2到1/3、登錄的流量消耗也可以節(jié)省30%左右。
對于用于傳輸實時音視頻數據流的UDP協議,為了提高弱網下的實時音視頻的通話效果,需要使用相關方案來做QoS質量保障;同時網絡層需要實時探測網絡狀態(tài),作為底層調整QoS策略的依據;還要回調上層,動態(tài)調整音視頻的碼率,做到音視頻碼率自適應。通過上面的QoS保障,實際測試在20%的隨機丟包弱網環(huán)境下,音視頻通話還能夠正常進行。網易云信針對音頻和視頻,還采取了一系列的優(yōu)化方法,以保證弱網條件下音頻和視頻的質量。
對于圖片和語音文件,網易云信并沒有通過長連接收發(fā),而是通過HTTP上傳下載。為了提高HTTP分片上傳過程中網絡的利用效率,網易云信也采取了有效的優(yōu)化方法,把圖片文件上傳時間減少20%至30%,以及保證常規(guī)語音消息的正常發(fā)送和接收。
綜上所述:一直以來,提升消息推送達到率和到達速度、優(yōu)化網絡利用效率、節(jié)省系統(tǒng)資源等,都是安卓系統(tǒng)開發(fā)的核心和基礎,而網易云信IM SDK在不影響用戶體驗前提下,可實現后臺?;?、改善長連接加推送組合以及優(yōu)化弱網環(huán)境大數據傳輸。
網易云信是如何成為“技術俠”的?
網易在即時通訊領域已經有十多年的積累,從網易郵箱到網易泡泡再到易信,網易有多款用戶過億的移動端產品,這讓網易云信擁有了豐富的移動端解決方案優(yōu)化經驗。
在2014年底,網易重新組建了網易云信團隊,請來了一流的產品團隊加入,并增加了商務與技術支持,以便全方位的為客戶提供更加便捷和貼身的服務。網易云信目前已成功發(fā)送超過1000億條消息,每日上億條消息100%到達。自2015年10月推出,網易云信已經累積了7萬+APP,連接了2.4億用戶。
周江華介紹,網易云信提供專業(yè)的“T服務”,一站式快速響應和解決開發(fā)者和用戶的問題。該服務體系包含網易云信技術顧問服務體系、客戶顧問服務體系、用戶信任服務體系三大塊。網易云信技術顧問團隊是業(yè)內唯一一家提供1對1、7×24小時即時響應技術支持服務的團隊,團隊成員均來自一線互聯網公司。
在用戶信任方面,網易云信提供了故障賠償、郵件短信雙重預警、1月信用額度等保障服務。網易云信特別成立了網易云信用戶信任中心,把產品升級、專利技術、第三方機構云認證等方面的信息同步公示給用戶,其中包括CSA STAR Certification、ISO27001信息安全管理體系國際認證在內的多項云安全類認證服務及獎項,并確保用戶可享受到云信的56項專利技術。
寶寶樹是目前國內最大的母嬰垂直網站,旗下的“寶寶樹孕育”、“小時光”、“美囤媽媽”三款APP均使用了網易云信的聊天室+直播技術。在與競爭對手的PK中,網易云信憑借更小的包、不占空間、技術支持響應快、聊天室性能好、穩(wěn)定無異常等優(yōu)勢,成功被寶寶樹選中。
學吧課堂是一個主打 K12 領域的游戲化自適應學習的在線平臺,其IM使用場景主要在排行榜,可選擇排行高的學生,添加好友后進行私聊。同時,學吧課堂的教學白板、實時音頻、實時視頻也是用了網易云信的技術。
總結下來,在安卓的微觀世界里,網易已經拼殺了很多年。如今這些累積的IM“存活絕技”都通過網易云信向外輸出,這無疑是開發(fā)者的福音。正如網易創(chuàng)始人的丁磊在9月20日“網易云”整體發(fā)布會上所說,“網易云產品的推出,就是要解放全中國千千萬萬的程序員,讓他們過上錢多、事少、離家近的幸福生活”。
- 盒馬創(chuàng)始人預測:美團在快銷品領域超越天貓京東只是遲早的事
- 港科大攜手百望股份,打造金融智能體新篇章:開啟未來經濟預測新紀元
- 特斯拉得州工廠再次停產:產能壓力下的困境?
- 網傳持股計劃泡湯,員工成"最慘打工人"事件引爆輿論,廣汽埃安已采取行動辟謠
- 微軟與AMD聯手打造未來Xbox,揭秘芯片合作新篇章!
- 盒馬創(chuàng)始人:劉強東揭示京東天貓快消品與美團競爭之謎,新零售風向標!
- 劉強東坦言:京東面臨挑戰(zhàn),未來五年創(chuàng)新業(yè)務成破局關鍵
- 華為助力上海移動5G-A 2.0升級,打造智慧城市新標桿
- 亞馬遜云科技升級三大安全功能,筑牢生成式AI防御城墻
- 羅永浩數字人:驚艷還是噱頭,背后技術揭秘
免責聲明:本網站內容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網站出現的信息,均僅供參考。本網站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網站中的網頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網站在收到上述法律文件后,將會依法盡快聯系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。