第一次在簡書上發(fā)文章,有點緊張宪彩。
在android團隊和各大廠商的努力下休讳,以前的那種啟動一個應(yīng)用,后面會跟著啟動一堆服務(wù)的情況越來越少見尿孔,android手機現(xiàn)在的使用在我個人覺得俊柔,已經(jīng)比iOS差不到哪兒去了。因為android干掉了一個對于用戶非常惡心活合,對于開發(fā)非常有用的東西——背簦活。
首先介紹下卑字福活是什么東西留晚,在我們的實際app開發(fā)中,有很多的產(chǎn)品經(jīng)理非要設(shè)計出一些違反常規(guī)的功能告嘲,需要我們的手機和我們的服務(wù)器保持長連接错维,服務(wù)器實時的下發(fā)一些數(shù)據(jù)給我們的手機。對于長連接很好解決橄唬,利用普通的網(wǎng)絡(luò)IO或者是NIO都能解決需五,但是當(dāng)我們的應(yīng)用進程在手機資源不足或者是第三方安全軟件的強殺下,我們的應(yīng)用進程就會被干掉轧坎,這個時候宏邮,任何的長連接都會被斷掉。這個時候就催生了一種技術(shù)——备籽活蜜氨,就是保證我們應(yīng)用進程的活性。
在以前android沒有注意到這方面的時候捎泻,膘祝活的手段非常多,但是最有效的莫過于進程互拉笆豁。當(dāng)我們啟動一個應(yīng)用郎汪,我們的應(yīng)用會再后臺啟動一段jni代碼赤赊,再里面fork一個子進程出來,然后我們的應(yīng)用進程和子進程定時互相檢測煞赢,當(dāng)有一方停掉的時候抛计,另外一方給拉起來,這就是我們闭罩活收到吹截。
但是手機發(fā)展到5.0之后,出線了一種叫殺掉進程組的東西凝危,就是當(dāng)我們退出應(yīng)用或者是調(diào)用手機任務(wù)管理器波俄,清除應(yīng)用的時候,殺掉的這個應(yīng)用所在的進程組的所有進程蛾默,那么子進程也同樣會被殺掉懦铺。以前最有效的保活手段支鸡,一樣的灰飛煙滅阀趴。
最近在簡書里面看到一篇文章,寫辈源遥活的,其實那些手段我也試過棚菊,但是負(fù)責(zé)人的告訴大家浸踩,再新版本的系統(tǒng)上,這些都是無用功统求。检碗。。github上的那些框架也就是框架而已码邻,并沒有什么大的作用折剃。下面根據(jù)手機QQ給大家介紹一個提高活躍度的保活方案像屋,但是這個方案只是提高活躍度怕犁,并不能完全保活己莺。奏甫。。凌受。阵子。其實利用了一個很簡答的東西推送。
下面假如是一款及時通訊軟件:
1)將Service設(shè)置成為前臺進程(這樣當(dāng)手機資源不足的時候胜蛉,不會強殺這個應(yīng)用)
2)集成推送(這片文章提高活性主要就是利用這個挠进,下面來說說這個方案)
推送是什么就不說了色乾,基本每款app都集成了推送。下面來介紹一些推送的原理领突,當(dāng)我們的應(yīng)用啟動的時候暖璧,我們啟動了推送的SDK,會有一個推送的pushId(有的叫token)當(dāng)我們需要推送的時候攘须,將需要推送的pushId和推送的內(nèi)容利用網(wǎng)絡(luò)請求發(fā)送到推送服務(wù)器漆撞,然后推送服務(wù)器根據(jù)pushId找到客戶端,然后利用“推送通道”將消息下發(fā)到手機于宙。推送通道其實就是推送SDK和推送服務(wù)器的長連接浮驳。
上面知識介紹一個原理,跟我們提高崩炭活的方案還沒有多大的關(guān)系至会,正題從這里開始。
其實推送的SDK也是一個進程谱俭,各大廠商也是想破腦袋來保證推送的活躍度奉件,某推(具體不說了,怕被說打廣告)出了一個方案昆著,一個推送在一臺手機里面只有一個推送通道的連接县貌,當(dāng)一個手機里面有一個集成了這個推送的應(yīng)用啟動X推的推送通道,那么這個手機的所有應(yīng)用就都能收到消息了凑懂。
基于這個原理煤痕,我們可以在我們的手機里面也集成推送,服務(wù)器端定時發(fā)送透傳的心跳消息接谨,當(dāng)我們手機收到推送的時候摆碉,檢查下我們長連接的service是否還存活,如果存活就不處理脓豪,如果不存活巷帝,那么就啟動這個Service。這樣就能提高應(yīng)用的活躍度了扫夜。其實這是個很簡單的方案楞泼。。笤闯。现拒。
增加推送活性的方案:
1)推送的選型:最好選一些大廠app或者是app群體使用大的推送。App使用大那么用戶再使用某個app的時候望侈,就會啟動推送通道印蔬,這樣增加推送通道的活性也就是增加了你的應(yīng)用的活性。
2)最好是選用系統(tǒng)級別的推送:小米推送脱衙、華為推送都號稱是系統(tǒng)級別的推送侥猬,推送通道永遠不死例驹。
3)多家推送集成:我們可以一口氣集成集中系統(tǒng)級別推送+一個app群體大的推送,根據(jù)手機系統(tǒng)類型判斷退唠,小米手機就啟動小米推送鹃锈、華為手機就啟動華為推送,其他的系統(tǒng)就啟動第一個選擇的app群體大的推送瞧预。這樣是把第一個和第二個結(jié)合起來的屎债。(最后這個方案,也可以用在依賴推送的應(yīng)用上垢油,增加推送到達率)
這樣的做飯不能保證完全活躍盆驹,但是會增加你的應(yīng)用的活性,畢竟死馬當(dāng)做活馬醫(yī)滩愁。躯喇。。硝枉。廉丽。。
如果有問題妻味,歡迎大家評論和留言給我哈正压。。责球。焦履。