安卓世界微觀搏殺激烈,網(wǎng)易云信教你存活絕招

摘要:超過百萬個安卓APP拼搶30億部安卓終端,安卓世界的微觀博殺已經(jīng)到了近乎殘酷的地步。不了解不知道,一了解就嚇一跳。

安卓世界的競爭一向是異常激烈的。根據(jù)Talkingdata最新的2016年9月監(jiān)測數(shù)據(jù),中國現(xiàn)有移動智能終端41億多部,其中70%是安卓設備。而早在2012年的時候,全球安卓APP應用商店里的APP數(shù)量就已超過了100萬個,如今規(guī)模又進一步擴大到150萬個左右。這么多的安卓APP在拼搶接近30億部安卓終端,APP之間的微觀博殺已經(jīng)到了近乎殘酷的地步。

除了拼搶市場、擴大用戶數(shù)量外,如何提升用戶的日活躍度和粘性,也是安卓APP的存活之道。對于移動APP來說,即時消息IM功能正變得越來越重要:推送消息能刷出APP的存在感;IM能強化人與人之間的連接,在社交類產(chǎn)品中的用戶與用戶間溝通可以產(chǎn)生出更好的粘性。因此,在提升用戶日活和粘性方面,即時消息IM的穩(wěn)定性與可靠性非常重要。

不了解不知道,原來安卓后臺無時無刻不上演各APP之間拼搶系統(tǒng)和網(wǎng)絡資源、用各種方法絞殺其它APP的即時消息,從而提升自己存活機會的微觀大搏殺!究竟這個大搏殺激烈到什么程度,在這個大搏殺中的存活絕招有哪些?

微觀搏殺之“內(nèi)存殺手”

對于iOS來說,有 APNS服務做消息推送,系統(tǒng)相當穩(wěn)定。對安卓本身來說,在國外也有Google的GCM服務可用,但在國內(nèi)卻無法使用Google的服務。對于IM來說,當APP應用退到安卓后臺系統(tǒng)后,還必須能夠收到新消息提醒的。沒有GCM,怎么辦?

在最開始的時候,唯一能做的就是保持APP的后臺運行了。但其實手機等設備的內(nèi)存是拒絕后臺運行APP的,后臺運行了太多的APP會導致應用卡頓、不斷耗電、系統(tǒng)性能下降等問題。因此,安卓系統(tǒng)對于后臺運行的APP也不會放任自流。但后臺運行,卻是保持IM推送的幾乎唯一也是最主要的途徑。

APP想要在后臺保持運行,需要面對不少“殺手”。第一大殺手就是安卓的Low Memory Killer(LMK,“低內(nèi)存殺手”)機制。因為手機的內(nèi)存畢竟有限,當后臺運行的進程越來越多,內(nèi)存剩余量也就隨之減少。當有一個新的APP想要啟動,而如果此時內(nèi)存不夠了,LMK機制就會啟動,從正在運行的APP進程中挑選一個清理掉,釋放出空間。

LMK有兩個尺度去評判要“殺掉”哪個在后臺運行的APP進程。一個是APP進程優(yōu)先級,優(yōu)先級越低,被清理的可能性越大;另一個是內(nèi)存占用,占的內(nèi)存越多,被清理的權(quán)重自然也越大。

微觀搏殺之“用戶的劍”

除了系統(tǒng)LMK能夠殺掉后臺運行的APP進程外,用戶也一樣可以殺死進程。

用戶殺掉進程的方式有兩種,一種是在最近任務列表中將APP劃掉,這種方式和系統(tǒng)殺掉進程效果相同。另外一種就是通過Force Stop“強制停止”,這種方式比系統(tǒng)清理更加徹底。不但正在運行的APP進程會被清理,APP在重啟列表中的待重啟服務、注冊的各種鬧鐘、事件監(jiān)聽組件等都會被移除,除非用戶再主動點擊或者系統(tǒng)重啟等外力,APP沒法再自己重新“爬”起來了。

此外,國內(nèi)MIUI一類的ROM上,用戶從最近任務列表中將APP移除,效果竟然也是Force Stop“強制停止”。正常來說,如果是用戶主動操作,APP本身也不應該再重啟了。但有些時候這并非用戶本意,而且對于IM功能來說,一定要保障消息推送,否則會被不明就里的群眾誤認為軟件本身有問題。

微觀生存之“全家桶”

在目前國內(nèi)的Android生態(tài)環(huán)境中,無論采用什么方式,想要一直在后臺保持APP的運行越來越難了。

為了“生存”,當一個APP進程起來后,就去掃描已安裝的應用列表,看看有沒有自己的“同源兄弟姐妹”,比如集成了同一個SDK(開發(fā)工具包)的APP等,如果有的話就把這些APP“抱團”起來,互相?;睢⒒ハ鄦拘?。這就是現(xiàn)在比較出名的“全家桶”方案。

雖說這種方法確實能夠帶來較高的后臺存活率,特別是那些大廠和應用廣泛的SDK。如果有后臺推送的必要性,而且不會對用戶體驗造成太大傷害時,此方式還可以使用。但如果只是為了推廣告,則會對用戶造成傷害,反過來也可能會導致用戶直接卸載APP。

因為“全家桶”實在是太令人討厭,現(xiàn)在各種手機管理軟件都會對這種喚醒方式做限制,特別是在root過的機器上,可以做到完全切斷這些喚醒路徑。同時,很多手機的ROM(只讀存儲器,帶有系統(tǒng)重啟軟件包)也會自帶管理軟件,限制后臺運行和后臺喚醒,以便給設備換取更長的續(xù)航。

微觀生存之“共享心跳”

傳統(tǒng)上,每個IM客戶端都會各自維護一條與服務器的長連接,各自的消息和信令都在這條長連接上傳遞,每個APP也獨自發(fā)送“心跳”信息、斷線重連等事情。

所謂“心跳”機制,最早用于服務器的安全備份,為了防止服務器死機而在服務器之間周期性傳送簡短的“心跳”信息,一旦收不到對方的“心跳”信息,服務器可以接管對方的業(yè)務,避免業(yè)務的停滯。到了手機上,無論是安卓的原生應用,還是QQ、微博和微信,都采用了心跳機制,也就是APP終端定時向應用服務器發(fā)送簡短的信息。

各自獨立“心跳”的話,不同APP之間完全隔離、不會互相影響。但缺點也非常明顯,首先是做了很多重復的工作,造成了流量和電量的無謂消耗,第二是要保證所有的進程都能在后臺運行確實很艱難。

所謂“共享連接”,就是從眾多APP里面選出一個當前正在運行的,或者是被殺概率最低的APP作為總代理,由這個代理和服務器建立連接,手機上的所有其他APP都通過這個代理中轉(zhuǎn)與服務器通信。所有APP的消息都經(jīng)過代理中轉(zhuǎn),代理到服務器的連接是加密的,但到了代理這里理論上可以看到其它所有APP的來往消息。因此,這種共享長連接的方式并不適用于IM。

存活絕技之“獨行俠”與“影子武士”

周江華是網(wǎng)易資深安卓開發(fā)工程師,先后主導參與了易信、網(wǎng)易云信、網(wǎng)易七魚的客戶端開發(fā)工作,擁有非常豐富的功能開發(fā)以及代碼優(yōu)化經(jīng)驗。2016年9月23日,MDCC 2016中國移動開發(fā)者大會上,周江華介紹了網(wǎng)易云信IM在應對弱網(wǎng)環(huán)境、移動端硬件限制以及Android復雜的生態(tài)現(xiàn)狀時的探索與心得。

周江華介紹說,雖說APP終究免不了一死,但通過對照LMK的評判準則,還是可以降低APP被清理的概率。第一個就是降低APP進程的內(nèi)存占用。如果采用單進程的模式,由于進程中包含了UI、Webview、圖片緩存等內(nèi)容,內(nèi)存占用必然會居高不下。因此,IM軟件一般都會采用雙進程甚至多進程的策略,將push進程獨立出來——在push進程里只處理網(wǎng)絡連接和push業(yè)務,不參與任何其他業(yè)務邏輯,更不包含任何UI。這有些“獨行俠”的意思。


網(wǎng)易云信Android SDK架構(gòu)

上圖為網(wǎng)易云信Android SDK架構(gòu),按照分層的結(jié)構(gòu)模式設計。最底下為push層,就是作為一個獨立進程運行,只負責處理網(wǎng)絡長連接的相關工作,比如安全加密、心跳、鑒權(quán)、封包、解包等工作,所有業(yè)務邏輯都交給UI進程的服務模塊去做。再看一下云信demo的進程內(nèi)存占用情況,push進程的內(nèi)存占用只有10M左右。因此,當處于后臺時,push進程被清理概率比UI主進程低很多。

降低被清理概率的第二個手段是提升進程優(yōu)先級。實際上,安卓的前臺服務設計上有一個漏洞,通過兩個服務的配合就能創(chuàng)建一個隱形的前臺服務。也就是啟動兩個服務進程,每一個都賦予了同樣的進程ID,但在常駐通知欄中只有一個相應的進程ID,這樣一旦系統(tǒng)關掉一個進程ID的時候,盡管“殺掉”了一個前臺服務和相應的常駐通知欄進程,但還有一個隱形的服務仍在存在而且不會受到任何影響。這種“影子武士”的好處是,用戶不會有任何感知,但仍然能獲得“幕后”的消息保護。

存活絕技之“龍威鏢局”

前面提到了共享長連接的方式并不適合IM,但適當?shù)膬?yōu)化仍然可以保障IM,這就是脫敏共享連接的方式:安全長連接加推送連接模式。

所謂“安全長連接加推送連接模式”就是每個APP在使用和真正傳遞數(shù)據(jù)時,仍然獨立使用自己的安全長連接,而當APP退到后臺一段時間后則斷開長連接,然后開啟一個推送代理,選擇其中一個與云信的推送服務器建立連接。之后當APP有新消息時,就通過這個推送連接傳遞。這種情況下,APP可以控制發(fā)出的推送消息的安全級別。這種代理機制相當于給APP的消息傳遞找到了一個“鏢局”,既保證了消息的安全性,又保證了傳送的效率。

采用代理連接的方式,當推送消息到達后臺,如果是代理APP自己的消息就直接傳遞給APP即可,如果是其他APP消息,就發(fā)出一條通知欄提醒,等用戶點擊通知欄提醒后,才會把目標APP喚醒。之所以通過通知欄提醒而不是直接喚醒APP,一方面是因為直接喚醒可能會失敗,另一方面是如果喚醒而不使用就會導致無謂的電量消耗。

此外,現(xiàn)在國內(nèi)的ROM中,華為和小米的操作系統(tǒng)自帶推送系統(tǒng)且開放給了第三方APP。在華為和小米的系統(tǒng)中,使用系統(tǒng)自帶的推送通道會更穩(wěn)定、也更節(jié)省資源。因此在MIUI上,從長連接到推送通道的切換流程仍然和前述一樣,只是把消息轉(zhuǎn)發(fā)到MIUI的推送服務器,然后再傳遞給云信的APP,華為的推送系統(tǒng)流程也是一樣。

不過華為和MIUI在推送的實現(xiàn)上略有區(qū)別,MIUI的通知欄提醒是在系統(tǒng)的推送代理里完成,而華為卻是將提醒通知交給APP去完成。另外,它們系統(tǒng)通知欄提醒的管理接口也有區(qū)別,在APP沒有被禁用的情況下,兩者都可以收到推送,而如果APP已經(jīng)被禁用了,MIUI的通知欄提醒方式還可以將推送送達,而其它的推送方式則不能送達了。

突破弱網(wǎng)環(huán)境的三大限制

相對于PC的網(wǎng)絡環(huán)境,周江華總結(jié)手機網(wǎng)絡有3個特點:第一個是慢,尤其是2G、3G網(wǎng)絡,慢的令人發(fā)指;其次是斷,手機跟著人不停的移動,網(wǎng)絡也不停的在切換,從wifi到移動網(wǎng)絡、從一個基站到另一個基站、從有信號到?jīng)]信號,都可能導致網(wǎng)絡中斷;第三是貴,只要看中國移動每天凈賺一個億就知道了。

在網(wǎng)易云信整個通信系統(tǒng)中,有三種類型的連接,即TCP、UDP和HTTP。三種類型的協(xié)議對應了不同的業(yè)務應用:TCP主要是用戶長連接,也就是普通IM消息和信令的傳輸;UDP用于傳輸實時音視頻數(shù)據(jù)流;而HTTP則主要用在音頻、圖片等文件的上傳下載上。

對于長連接,可以采用開源協(xié)議,有成熟的解決方案、擴展性好、可讀性好,甚至還可以和其它系統(tǒng)互聯(lián)互通,但問題是協(xié)議文本普遍比較臃腫、冗余字段很多,在昂貴的移動網(wǎng)絡里自然就成本比較貴。網(wǎng)易云信采用的是私有的二進制協(xié)議,以“0/1”方式表達的二進制協(xié)議完全失去了可讀性,但卻帶來極高的表達效率,相對于文本協(xié)議可以節(jié)省非常多的數(shù)據(jù)流量。此外,在判斷LBS地址、發(fā)出登錄請求、建立安全連接的協(xié)議握手等,可以通過并行和增量操作的方式,把登錄時間降為原來的1/2到1/3、登錄的流量消耗也可以節(jié)省30%左右。

對于用于傳輸實時音視頻數(shù)據(jù)流的UDP協(xié)議,為了提高弱網(wǎng)下的實時音視頻的通話效果,需要使用相關方案來做QoS質(zhì)量保障;同時網(wǎng)絡層需要實時探測網(wǎng)絡狀態(tài),作為底層調(diào)整QoS策略的依據(jù);還要回調(diào)上層,動態(tài)調(diào)整音視頻的碼率,做到音視頻碼率自適應。通過上面的QoS保障,實際測試在20%的隨機丟包弱網(wǎng)環(huán)境下,音視頻通話還能夠正常進行。網(wǎng)易云信針對音頻和視頻,還采取了一系列的優(yōu)化方法,以保證弱網(wǎng)條件下音頻和視頻的質(zhì)量。

對于圖片和語音文件,網(wǎng)易云信并沒有通過長連接收發(fā),而是通過HTTP上傳下載。為了提高HTTP分片上傳過程中網(wǎng)絡的利用效率,網(wǎng)易云信也采取了有效的優(yōu)化方法,把圖片文件上傳時間減少20%至30%,以及保證常規(guī)語音消息的正常發(fā)送和接收。

綜上所述:一直以來,提升消息推送達到率和到達速度、優(yōu)化網(wǎng)絡利用效率、節(jié)省系統(tǒng)資源等,都是安卓系統(tǒng)開發(fā)的核心和基礎,而網(wǎng)易云信IM SDK在不影響用戶體驗前提下,可實現(xiàn)后臺?;睢⒏纳崎L連接加推送組合以及優(yōu)化弱網(wǎng)環(huán)境大數(shù)據(jù)傳輸。

網(wǎng)易云信是如何成為“技術(shù)俠”的?

網(wǎng)易在即時通訊領域已經(jīng)有十多年的積累,從網(wǎng)易郵箱到網(wǎng)易泡泡再到易信,網(wǎng)易有多款用戶過億的移動端產(chǎn)品,這讓網(wǎng)易云信擁有了豐富的移動端解決方案優(yōu)化經(jīng)驗。

在2014年底,網(wǎng)易重新組建了網(wǎng)易云信團隊,請來了一流的產(chǎn)品團隊加入,并增加了商務與技術(shù)支持,以便全方位的為客戶提供更加便捷和貼身的服務。網(wǎng)易云信目前已成功發(fā)送超過1000億條消息,每日上億條消息100%到達。自2015年10月推出,網(wǎng)易云信已經(jīng)累積了7萬+APP,連接了2.4億用戶。

周江華介紹,網(wǎng)易云信提供專業(yè)的“T服務”,一站式快速響應和解決開發(fā)者和用戶的問題。該服務體系包含網(wǎng)易云信技術(shù)顧問服務體系、客戶顧問服務體系、用戶信任服務體系三大塊。網(wǎng)易云信技術(shù)顧問團隊是業(yè)內(nèi)唯一一家提供1對1、7×24小時即時響應技術(shù)支持服務的團隊,團隊成員均來自一線互聯(lián)網(wǎng)公司。

在用戶信任方面,網(wǎng)易云信提供了故障賠償、郵件短信雙重預警、1月信用額度等保障服務。網(wǎng)易云信特別成立了網(wǎng)易云信用戶信任中心,把產(chǎn)品升級、專利技術(shù)、第三方機構(gòu)云認證等方面的信息同步公示給用戶,其中包括CSA STAR Certification、ISO27001信息安全管理體系國際認證在內(nèi)的多項云安全類認證服務及獎項,并確保用戶可享受到云信的56項專利技術(shù)。

寶寶樹是目前國內(nèi)最大的母嬰垂直網(wǎng)站,旗下的“寶寶樹孕育”、“小時光”、“美囤媽媽”三款APP均使用了網(wǎng)易云信的聊天室+直播技術(shù)。在與競爭對手的PK中,網(wǎng)易云信憑借更小的包、不占空間、技術(shù)支持響應快、聊天室性能好、穩(wěn)定無異常等優(yōu)勢,成功被寶寶樹選中。

學吧課堂是一個主打 K12 領域的游戲化自適應學習的在線平臺,其IM使用場景主要在排行榜,可選擇排行高的學生,添加好友后進行私聊。同時,學吧課堂的教學白板、實時音頻、實時視頻也是用了網(wǎng)易云信的技術(shù)。

總結(jié)下來,在安卓的微觀世界里,網(wǎng)易已經(jīng)拼殺了很多年。如今這些累積的IM“存活絕技”都通過網(wǎng)易云信向外輸出,這無疑是開發(fā)者的福音。正如網(wǎng)易創(chuàng)始人的丁磊在9月20日“網(wǎng)易云”整體發(fā)布會上所說,“網(wǎng)易云產(chǎn)品的推出,就是要解放全中國千千萬萬的程序員,讓他們過上錢多、事少、離家近的幸福生活”。


極客網(wǎng)企業(yè)會員

免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內(nèi)容或斷開相關鏈接。

2016-10-09
安卓世界微觀搏殺激烈,網(wǎng)易云信教你存活絕招
摘要:超過百萬個安卓APP拼搶30億部安卓終端,安卓世界的微觀博殺已經(jīng)到了近乎殘酷的地步。不了解不知道,一了解就嚇一跳。

長按掃碼 閱讀全文