国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Android后臺(tái)保活實(shí)踐總結(jié):即時(shí)通訊應(yīng)用無法根治的“頑疾”

移動(dòng)開發(fā) Android
Android后臺(tái)保活實(shí)踐總結(jié)基于作者的實(shí)踐以及相關(guān)資料的整理,總結(jié)了自已對Android進(jìn)程和Service保活的理解,希望能為你的應(yīng)用開發(fā)帶來啟發(fā)。

前言

Android進(jìn)程和Service的保活,是困擾Android開發(fā)人員的一大頑疾。因涉及到省電和內(nèi)存管理策略,各廠商基于自家的理解,在自已ROOM發(fā)布于都對標(biāo)準(zhǔn)Android發(fā)行版作為或多或少的改動(dòng),使得應(yīng)用層程序在處理進(jìn)程和Service保活問題上變的異常復(fù)雜,且很難兼容,因?yàn)檎f不定哪款手機(jī)或者哪個(gè)版本的省電策略發(fā)生改變,那么隨之而來的就是進(jìn)程和Service保活的差異。

在應(yīng)用場景上,由于即時(shí)通訊應(yīng)用(包括IM聊天應(yīng)用、消息推送服務(wù)等)為了保證消息的全時(shí)、實(shí)時(shí)送達(dá)能力,必須要實(shí)現(xiàn)進(jìn)程或Service的保活。而就這一看似不起眼的問題,實(shí)際處理起來,因?yàn)楸姸郃ndroid手機(jī)和Android系統(tǒng)版本的差異,讓問題的處理充滿了不確定性。

本文基于作者的實(shí)踐以及相關(guān)資料的整理,總結(jié)了自已對Android進(jìn)程和Service保活的理解,希望能為你的應(yīng)用開發(fā)帶來啟發(fā)。

概述

近期做了一個(gè)Android項(xiàng)目,涉及到了后臺(tái)進(jìn)程和Service保活的問題,網(wǎng)上找了很多資料,基本的保活方法都測試了。結(jié)果是:不同的手機(jī),不同的Android版本保活效果各有差異。最難繞過的是個(gè)廠商對“后臺(tái)程序保活”管理。

本文主要把相應(yīng)的實(shí)踐結(jié)果和保活方法進(jìn)行總結(jié)。然而,因筆者可用的測試真機(jī)有限,可能存有不完整的地方,還請及時(shí)提出指正并補(bǔ)充,大家共同進(jìn)步。

手機(jī)QQ、微信這樣的大型IM是如何解決保活問題的?

以小米手機(jī)為例,MIUI的神隱模式讓很多IM和推送開發(fā)同行糾結(jié)不已:在MIUI深度休眠之后,默認(rèn)會(huì)徹底斷開后臺(tái)應(yīng)用的socket。但微信、QQ這樣的應(yīng)用,MIUI官方的帖子說了:給這2個(gè)應(yīng)用特殊照顧。好吧,特殊照顧,普通的APP只能繼續(xù)折騰了。

(關(guān)于MIUI的神隱模式的討論,見此貼的回復(fù):http://www.52im.net/thread-354-1-1.html)

本文實(shí)踐涉及到的真機(jī)型號和版本

手機(jī):三星9100-4.1.2,三星9300-4.3,華為G730-4.1.2,華為TL00H-EMUI3.1(android 5.1.1),魅族MX4-Flyme4.2.8.2c(android 4.4.2)。

手頭能用的測試機(jī)就這些了。主要測試的service是一個(gè)最基本的service,在相應(yīng)的生命周期的觸發(fā)函數(shù)上做了輸出。測試時(shí)都沒有添加到后臺(tái)保護(hù)中,注:三星的機(jī)子沒找到有后臺(tái)保護(hù)設(shè)置的地方。

為什么我們的后臺(tái)進(jìn)程/Service會(huì)被結(jié)束掉?

我想到的是有三個(gè)方面:

  • Android系統(tǒng)內(nèi)存回收機(jī)制;
  • 各廠商對后臺(tái)程序的一個(gè)管理制度(就是允許程序后臺(tái)運(yùn)行那個(gè));
  • 第三方軟件的清理(360什么的)。

其中有的后臺(tái)程序保護(hù)把程序結(jié)束的同時(shí)會(huì)把程序弄成停止?fàn)顟B(tài),導(dǎo)致無法接收廣播!

我們的保活方案有哪些?

1)控制onStartCommand函數(shù)的返回值:

我對這個(gè)函數(shù)的理解是:當(dāng)服務(wù)被異常終止時(shí),是否重啟服務(wù)?有些文章里面在用這個(gè)做保活時(shí),修改的是flag,在我實(shí)際測試中是無效。有效的做法是直接返回參數(shù)。另外默認(rèn)的flags值為0,是START_STICKY_COMPATIBILITY。

具體代碼如下:

  1. @Override 
  2. publicintonStartCommand(Intent intent,intflags,intstartId) { 
  3.     // TODO Auto-generated method stub 
  4.     returnSTART_STICKY; 
  5.     //return super.onStartCommand(intent, flags, startId); 

測試結(jié)果:

魅族的機(jī)子無效,不管默認(rèn)還是修改參數(shù),在DDMS里面直接結(jié)束進(jìn)程后都不會(huì)重啟服務(wù)。其它三臺(tái)機(jī)子(9100沒測):默認(rèn)參數(shù)的情況下就會(huì)重啟服務(wù),return START_STICKY 會(huì)重啟,return START_NOT_STICKY 不會(huì)重啟。

另外:用360一鍵清理,或者360超級ROOT的手機(jī)優(yōu)化,會(huì)殺死進(jìn)程,過會(huì)兒還是會(huì)重啟,只是會(huì)慢很多,大概是在排隊(duì)重啟服務(wù)。

2)在service 的onDestory里面重啟服務(wù):

這個(gè)在所有能觸發(fā)onDestory的情況下都是有效的。4臺(tái)測試機(jī)都測試過。直接startService 或者發(fā)送廣播重啟都可以 。

但能觸發(fā)onDestory的情況,我不知道內(nèi)存回收會(huì)不會(huì)觸發(fā)。另外兩種情況(2,3)是不觸發(fā)的。我的測試方法是在“設(shè)置”-> 應(yīng)用管理-> 正在運(yùn)行-> 停止服務(wù)。(這個(gè)是正常停止服務(wù),會(huì)觸發(fā)onDestory,所以上面的onStartCommand效果不會(huì)觸發(fā)。)

3)提高服務(wù)的優(yōu)先級:

這個(gè)主要是針對***種kill服務(wù)的情況,內(nèi)存回收機(jī)制。由于這個(gè)測試比較難搭建。360清理什么把后臺(tái)的進(jìn)程都?xì)⒌模w現(xiàn)不出優(yōu)先級這樣的概念。我的建議是能提高就提高,下面幾個(gè)實(shí)驗(yàn)。

[1] 前臺(tái)service:

創(chuàng)建一個(gè)通知使自己成為前臺(tái)service

測試結(jié)果:

360一鍵清理和手機(jī)優(yōu)化,不會(huì)把該service結(jié)束掉。

[2] 對于后臺(tái)保護(hù):

華為G730不結(jié)束service,魅族和華為TL00H都會(huì)結(jié)束service。通知欄的保活效果還是可以的,一般的應(yīng)用要求基本能滿足了。

[3] 若有root權(quán)限:

android:persistent="true",并放入system/app中

測試結(jié)果:

效果一般,三星9100上用360等清理工具殺不掉進(jìn)程,在華為G730上沒什么效果.(這個(gè)測試跟onStartCommand有點(diǎn)干擾)。

4)守護(hù)進(jìn)程:

雙服務(wù):360會(huì)同時(shí)殺掉兩個(gè)服務(wù),分兩個(gè)apk也一樣。

native守護(hù)進(jìn)程:360不會(huì)殺掉native的守護(hù)進(jìn)程,但在魅族和華為TL00H中待機(jī)一段時(shí)間后還是會(huì)被殺掉。

結(jié)論和待續(xù):

1. 一般的應(yīng)用添加到后臺(tái)保護(hù)進(jìn)程后,改個(gè)onStartCommand返回值,再加個(gè)通知。基本上大部分都能保活了。

2. 雙服務(wù)我覺得沒有native守護(hù)進(jìn)程來的好,雖然360,微信什么的都有幾個(gè)進(jìn)程服務(wù),但如果不添加到后臺(tái)保活的話,效果一樣不能保活,也會(huì)進(jìn)入停止?fàn)顟B(tài)。

3. 但是.360手機(jī)助手會(huì)創(chuàng)建雙natice守護(hù)進(jìn)程做相互的看守。存活的效果會(huì)高一點(diǎn)點(diǎn)。“沒添加到后臺(tái)保活”一般只會(huì)殺一次,(魅族是屏幕關(guān)閉后5分鐘,華為TL00H是屏幕關(guān)閉時(shí))。

附個(gè)native守護(hù)進(jìn)程:利用socket來判斷服務(wù)是否存在,需要在被保活的服務(wù)里創(chuàng)建一個(gè)監(jiān)聽socket。調(diào)試信息會(huì)在SD卡目錄下創(chuàng)建一個(gè)daemon.log。使用方法:NDKFork port包名/.服務(wù)名。具體下載鏈接:http://download.csdn.net/detail/pvlking/9412815

Android應(yīng)用實(shí)現(xiàn)保活的基本原理總結(jié)

都是通過雙進(jìn)程互拉以及設(shè)置進(jìn)程的重要性,除非你root后,把自己的進(jìn)程設(shè)置成系統(tǒng)進(jìn)程。

互拉的方式有很多種:

  • 可以通過監(jiān)聽系統(tǒng)廣播來把自己拉起來
  • 可以多個(gè)app相互拉
  • 可以把自己的服務(wù)搞成前臺(tái)服務(wù)
  • 在service的onstart方法里返回 STATR_STICK
  • 添加Manifest文件屬性值為android:persistent=“true”
  • 覆寫Service的onDestroy方法
  • 服務(wù)互相綁定
  • 設(shè)置鬧鐘,定時(shí)喚醒
  • 自己的app在native層fork一個(gè)子進(jìn)程來與主進(jìn)程互拉。

綜上所述,總結(jié)下來就是,目前實(shí)現(xiàn)Android后臺(tái)保活沒有***實(shí)現(xiàn),只能針對不同的機(jī)型綜合使用上面列舉的方法,同時(shí)祈禱自已APP的用戶不要遇到奇葩機(jī)型的保活問題。

推薦一個(gè)開源的解決方案

1)源碼托管地址

源碼托管地址是:https://github.com/52im/MarsDaemon。

2)實(shí)現(xiàn)原理

原理:使用Jni,在 c端 fork進(jìn)程,檢測Service是否存活,若Service已被殺死,則進(jìn)行重啟Service. 至于檢測方式,可以輪詢獲取子進(jìn)程Pid,若為1, 則說明子進(jìn)程被Init進(jìn)程所領(lǐng)養(yǎng),已經(jīng)成為了孤兒進(jìn)程. 但是這種方式比較消耗電量,并且由于不同手機(jī)系統(tǒng)定制的改變,當(dāng)應(yīng)用被強(qiáng)制停止時(shí),父進(jìn)程并不一定被真正殺死,因此在一些特定機(jī)型上是無法通過此方式進(jìn)行判斷. 這里推薦使用liunx socket的方式進(jìn)行類似心跳包的檢測,并且當(dāng)觸發(fā)檢測Service是否被殺死之前,需要判斷應(yīng)用是否已經(jīng)被卸載,如果應(yīng)用已經(jīng)被卸載,則不再進(jìn)行檢測Service行為,直接調(diào)用exit(0)退出子進(jìn)程,避免浪費(fèi)系統(tǒng)資源和消耗電量.

注意: 目前在Android 5.0系統(tǒng)上會(huì)把fork出來的進(jìn)程放到一個(gè)進(jìn)程組里, 當(dāng)程序主進(jìn)程掛掉后,也會(huì)把整個(gè)進(jìn)程組殺掉,因此用fork的方式也無法在Android5.0及以上系統(tǒng)實(shí)現(xiàn)守護(hù)進(jìn)程. 這個(gè)是系統(tǒng)層面的限制,當(dāng)然也是為了優(yōu)化整個(gè)的系統(tǒng)環(huán)境,守護(hù)進(jìn)程給手機(jī)帶來的體驗(yàn)并不好

具體見源碼:http://androidxref.com/5.0.0_r2/ ... /ProcessRecord.java

 

好消息:

Android5.0 以上目前已在 https://github.com/52im/MarsDaemon 中被黑科技攻克,部分機(jī)型可能無法起到作用,但思路很值得借鑒,代碼結(jié)構(gòu)也不錯(cuò), 具體方案請見源碼哦。

 

責(zé)任編輯:武曉燕 來源: blogjava
相關(guān)推薦

2021-08-14 09:23:03

即時(shí)通訊IM互聯(lián)網(wǎng)

2011-10-20 22:25:49

網(wǎng)易即時(shí)通

2011-06-30 10:50:24

即時(shí)通訊

2011-08-04 14:50:07

263EM

2012-06-11 09:27:17

imo即時(shí)通訊

2016-09-28 09:48:40

網(wǎng)易云信IM云服務(wù)

2012-03-05 11:06:28

imo即時(shí)通訊

2013-10-16 11:32:55

imoRTX即時(shí)通訊

2012-03-30 10:47:05

imo

2010-04-30 10:35:09

即時(shí)通訊MSN

2014-11-17 11:58:49

即時(shí)通訊云

2012-03-29 13:47:18

即時(shí)通訊

2021-10-20 05:55:22

即時(shí)通訊IM網(wǎng)絡(luò)

2012-05-07 10:20:55

imo即時(shí)通訊

2012-05-24 10:31:16

imo即時(shí)通訊

2012-03-15 14:55:03

imo即時(shí)通訊

2015-08-13 10:02:48

容聯(lián)云通訊

2011-02-22 10:25:01

Linux即時(shí)通訊

2015-09-14 17:32:22

容聯(lián)即時(shí)通訊云
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

日韩在线观看免费全集电视剧网站| 国产乱码一区二区三区| 一区二区日韩电影| 亚洲精品久久久久久久久| 69**夜色精品国产69乱| 影音先锋欧美在线| 夜色福利刺激| 久久成人国产| 色综合久久综合中文综合网| 国产区亚洲区欧美区| 麻豆网站在线看| 国内综合精品午夜久久资源| 欧美日韩国产a| 日本欧美电影在线观看| x99av成人免费| 首页国产欧美日韩丝袜| 日韩a级黄色片| 国产一区二区三区四区二区| 亚洲狠狠丁香婷婷综合久久久| 日韩欧美国产二区| 亚洲经典自拍| 成人自拍爱视频| a级片在线免费| 亚洲激情中文1区| 97精品国产aⅴ7777| 97免费视频观看| 国产九一精品| 欧美日韩综合视频| 亚洲天堂第一页| 一区二区三区四区视频在线| av一本在线| 久久国产精品免费| 一本一道久久a久久精品逆3p| 亚洲日本精品国产第一区| 欧美日韩第一| 国产精品麻豆视频| 亚洲国产午夜伦理片大全在线观看网站| 久久大胆人体| 欧美日韩国产一区中文午夜| 亚洲小视频在线播放| 天堂美国久久| 欧美黑人3p| 欧美mv和日韩mv的网站| 99草草国产熟女视频在线| 国产欧美日产一区| 日韩加勒比系列| 欧美午夜在线观看| 黄视频免费在线看| 欧美成人h版在线观看| 一本色道久久综合亚洲精品酒店| 91精品视频在线免费观看| 欧美精品啪啪| 超碰97免费观看| 国产欧美一区二区三区鸳鸯浴| 最近中文字幕mv第三季歌词| 欧美日韩中国免费专区在线看| 国产一二区在线| 中文字幕欧美日韩va免费视频| 美女av一区| 久久精品国产一区二区三区不卡| 国产精品一区专区| 国产色a在线观看| 日韩精品一区二区三区视频在线观看 | 亚洲精品国产精品自产a区红杏吧| 色猫猫成人app| 日韩av第一页| 美女精品自拍一二三四| qvod激情图片| 91精品国产91久久久久久一区二区 | 国产成人精品在线播放| 一本久道综合久久精品| 少妇高潮喷水久久久久久久久久| 性欧美大战久久久久久久久| 欧美xoxoxo| 亚洲最大福利网站| www国产成人| 国产在线1区| 欧美在线视频播放| 国内成+人亚洲+欧美+综合在线| 国产精品粉嫩av| 亚洲欧美另类中文字幕| 99精品美女| av免费播放网址| 欧美一区二区视频观看视频| 伊人久久大香线蕉无限次| 国产成年人在线观看| 精品久久久久久久久久久久| 日韩欧美专区| 欧美精品一区二区三区久久| 亚洲狼人国产精品| 欧美一区国产| 免费电影一区| 一区二区三区四区五区视频在线观看 | 国产精品吊钟奶在线| 精品在线视频一区| 国产视频网站在线| 欧美激情一区二区三区久久久 | 国产成人看片| 亚洲丝袜制服诱惑| 免费日韩成人| 免费av一区二区| 久久国产福利国产秒拍| 欧美美女搞黄| 国产精品第3页| 国产精品天天看| 成人国产一区| 日本亚洲导航| 在线视频欧美区| 日韩在线观看| 中文字幕国内自拍| 视频在线一区二区| 狠狠色2019综合网| 肉肉视频在线观看| 99久久99久久精品国产片| 一区二区三区在线视频免费| 成人午夜三级| 少妇一级淫免费播放| 曰本色欧美视频在线| 国产在线一区二区| 50度灰在线| 欧美日韩一区二区视频在线观看| 欧美日韩亚洲综合在线| 亚洲午夜黄色| 嫩草精品影院| 国产精品欧美久久| 在线观看91av| 国产精品婷婷| 国产美女情趣调教h一区二区| 官网99热精品| 666欧美在线视频| 好吊视频一区二区三区四区| 成人亚洲综合天堂| 欧美lavv| 精品久久久久久久久久久久久久久久久| 亚洲欧美清纯在线制服| 高h视频在线观看| 精品卡一卡二| 制服丝袜av成人在线看| 一本一道久久综合狠狠老精东影业| 免费福利在线观看| 麻豆成人小视频| 欧美不卡一二三| 国产激情偷乱视频一区二区三区| 新片速递亚洲合集欧美合集| 欧美 激情 在线| 性欧美视频videos6一9| 亚洲一卡二卡三卡四卡五卡| 色婷婷亚洲mv天堂mv在影片| 国产黄色片在线观看| 国产伦精品一区二区三区照片91| 欧美一区二区免费| 国产成人在线网站| 大陆精大陆国产国语精品| xxxx影院| 国产精品久久久久免费| 91精品国产品国语在线不卡| 久88久久88久久久| 日韩成人在线电影| 一级毛片免费视频| 国产中文一区二区| 亚洲欧美日韩综合| 国产亚洲欧美日韩俺去了| 日日狠狠久久偷偷综合色| 欧美偷拍视频| 亚洲国产综合自拍| 久久久亚洲国产| 欧美视频不卡中文| 热久久国产精品| 国产欧美日韩电影| 日韩精品一二| 影音先锋欧美在线| 日本一区二区三区四区视频| 欧美三级午夜理伦三级中视频| 国产精品亚洲第一区在线暖暖韩国 | 精品一区二区三| 国产不卡视频| 精品国产乱码久久久久| 5278欧美一区二区三区| 色综合久久中文字幕| 国产亚洲成年网址在线观看| 国产一区二区三区观看| 午夜精品久久久久99热蜜桃导演| 日韩欧美精品| 亚洲精品日韩久久| 日本欧美韩国| 免费成人黄色| 国产精品视频网站在线观看| 国产精品男人爽免费视频1| 在线观看欧美黄色| av不卡一区二区三区| 久久久久久久久国产一区| 午夜激情一区| 亚洲色图网站| 国产精品中文字幕制服诱惑| 日本免费一区二区三区等视频| 国产精品诱惑| 久久狠狠久久综合桃花| 久久久成人精品| 欧美一区二区三区在| 97精品久久久午夜一区二区三区|