亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Android > 正文

詳解Android進程?;畹姆椒?/h1>
2019-12-12 03:29:03
字體:
供稿:網(wǎng)友

關(guān)于 Android 平臺的進程保活這一塊,想必是所有 Android 開發(fā)者矚目的內(nèi)容之一。你到網(wǎng)上搜 Android 進程?;睿梢运殉龈鞣N各樣神乎其技的做法,絕大多數(shù)都是極其不靠譜。前段時間,Github還出現(xiàn)了一個很火的“黑科技”進程?;顜?,聲稱可以做到進程永生不死。

懷著學習和膜拜的心情進去Github圍觀,結(jié)果發(fā)現(xiàn)很多人提了 Issue 說各種各樣的機子無法成功保活。

看到這里,我瞬間就放心了。坦白的講,我是真心不希望有這種黑科技存在的,它只會滋生更多的流氓應(yīng)用,拖垮我大 Android 平臺的流暢性。

扯了這么多,接下來就直接進入本文的正題,談?wù)勱P(guān)于進程?;畹闹R。提前聲明以下四點

  • 本文是本人開發(fā) Android 至今綜合各方資料所得
  • 不以節(jié)能來維持進程?;畹氖侄?,都是耍流氓
  • 本文不是教你做永生不死的進程,如果指望實現(xiàn)進程永生不死,請忽略本文
  • 本文有錯誤的地方,歡迎留下評論互相探討(拍磚請輕拍)

保活手段

當前業(yè)界的Android進程?;钍侄沃饕譃?黑、白、灰 三種,其大致的實現(xiàn)思路如下:

黑色?;睿翰煌腶pp進程,用廣播相互喚醒(包括利用系統(tǒng)提供的廣播進行喚醒)

白色?;睿簡忧芭_Service

灰色?;睿豪孟到y(tǒng)的漏洞啟動前臺Service

黑色保活

所謂黑色?;睿褪抢貌煌腶pp進程使用廣播來進行相互喚醒。舉個3個比較常見的場景:

場景1:開機,網(wǎng)絡(luò)切換、拍照、拍視頻時候,利用系統(tǒng)產(chǎn)生的廣播喚醒app

場景2:接入第三方SDK也會喚醒相應(yīng)的app進程,如微信sdk會喚醒微信,支付寶sdk會喚醒支付寶。由此發(fā)散開去,就會直接觸發(fā)了下面的 場景3

場景3:假如你手機里裝了支付寶、淘寶、天貓、UC等阿里系的app,那么你打開任意一個阿里系的app后,有可能就順便把其他阿里系的app給喚醒了。(只是拿阿里打個比方,其實BAT系都差不多)

沒錯,我們的Android手機就是一步一步的被上面這些場景給拖卡機的。

針對場景1,估計Google已經(jīng)開始意識到這些問題,所以在最新的Android N取消了 ACTION_NEW_PICTURE(拍照),ACTION_NEW_VIDEO(拍視頻),CONNECTIVITY_ACTION(網(wǎng)絡(luò)切換)等三種廣播,無疑給了很多app沉重的打擊。我猜他們的心情是下面這樣的

而開機廣播的話,記得有一些定制ROM的廠商早已經(jīng)將其去掉。

針對場景2和場景3,因為調(diào)用SDK喚醒app進程屬于正常行為,此處不討論。但是在借助LBE分析app之間的喚醒路徑的時候,發(fā)現(xiàn)了兩個問題:

1.很多推送SDK也存在喚醒app的功能

2.app之間的喚醒路徑真是多,且錯綜復雜

我把自己使用的手機測試結(jié)果給大家圍觀一下(我的手機是小米4C,刷了原生的Android5.1系統(tǒng),且已經(jīng)獲得Root權(quán)限才能查看這些喚醒路徑)

15組相互喚醒路徑

全部喚醒路徑

我們直接點開 簡書 的喚醒路徑進行查看

簡書喚醒路徑

可以看到以上3條喚醒路徑,但是涵蓋的喚醒應(yīng)用總數(shù)卻達到了23+43+28款,數(shù)目真心驚人。請注意,這只是我手機上一款app的喚醒路徑而已,到了這里是不是有點細思極恐。

當然,這里依然存在一個疑問,就是LBE分析這些喚醒路徑和互相喚醒的應(yīng)用是基于什么思路,我們不得而知。所以我們也無法確定其分析結(jié)果是否準確,如果有LBE的童鞋看到此文章,不知可否告知一下思路呢?但是,手機打開一個app就喚醒一大批,我自己可是親身體驗到這種酸爽的......

白色?;?/strong>

白色?;钍侄畏浅:唵?,就是調(diào)用系統(tǒng)api啟動一個前臺的Service進程,這樣會在系統(tǒng)的通知欄生成一個Notification,用來讓用戶知道有這樣一個app在運行著,哪怕當前的app退到了后臺。如下方的LBE和QQ音樂這樣:

灰色?;?/strong>

灰色?;?,這種保活手段是應(yīng)用范圍最廣泛。它是利用系統(tǒng)的漏洞來啟動一個前臺的Service進程,與普通的啟動方式區(qū)別在于,它不會在系統(tǒng)通知欄處出現(xiàn)一個Notification,看起來就如同運行著一個后臺Service進程一樣。這樣做帶來的好處就是,用戶無法察覺到你運行著一個前臺進程(因為看不到Notification),但你的進程優(yōu)先級又是高于普通后臺進程的。那么如何利用系統(tǒng)的漏洞呢,大致的實現(xiàn)思路和代碼如下:

思路一:API < 18,啟動前臺Service時直接傳入new Notification();

思路二:API >= 18,同時啟動兩個id相同的前臺Service,然后再將后啟動的Service做stop處理;

public class GrayService extends Service {  private final static int GRAY_SERVICE_ID = 1001;  @Override  public int onStartCommand(Intent intent, int flags, int startId) {    if (Build.VERSION.SDK_INT < 18) {      startForeground(GRAY_SERVICE_ID, new Notification());//API < 18 ,此方法能有效隱藏Notification上的圖標    } else {      Intent innerIntent = new Intent(this, GrayInnerService.class);      startService(innerIntent);      startForeground(GRAY_SERVICE_ID, new Notification());    }    return super.onStartCommand(intent, flags, startId);  }  ...  ...  /**   * 給 API >= 18 的平臺上用的灰色?;钍侄?  */  public static class GrayInnerService extends Service {    @Override    public int onStartCommand(Intent intent, int flags, int startId) {      startForeground(GRAY_SERVICE_ID, new Notification());      stopForeground(true);      stopSelf();      return super.onStartCommand(intent, flags, startId);    }  }}

代碼大致就是這樣,能讓你神不知鬼不覺的啟動著一個前臺Service。其實市面上很多app都用著這種灰色?;畹氖侄?,什么?你不信?好吧,我們來驗證一下。流程很簡單,打開一個app,看下系統(tǒng)通知欄有沒有一個 Notification,如果沒有,我們就進入手機的adb shell模式,然后輸入下面的shell命令

dumpsys activity services PackageName

打印出指定包名的所有進程中的Service信息,看下有沒有 isForeground=true 的關(guān)鍵信息。如果通知欄沒有看到屬于app的 Notification 且又看到 isForeground=true 則說明了,此app利用了這種灰色?;畹氖侄?。

下面分別是我手機上微信、qq、支付寶、陌陌的測試結(jié)果,大家有興趣也可以自己驗證一下。

微信

手Q

支付寶

陌陌

其實Google察覺到了此漏洞的存在,并逐步進行封堵。這就是為什么這種?;罘绞椒?API >= 18 和 API < 18 兩種情況,從Android5.0的ServiceRecord類的postNotification函數(shù)源代碼中可以看到這樣的一行注釋

當某一天 API >= 18 的方案也失效的時候,我們就又要另謀出路了。需要注意的是,使用灰色?;畈⒉淮碇愕腟ervice就永生不死了,只能說是提高了進程的優(yōu)先級。如果你的app進程占用了大量的內(nèi)存,按照回收進程的策略,同樣會干掉你的app。感興趣于灰色?;钍侨绾卫孟到y(tǒng)漏洞不顯示 Notification 的童鞋,可以研究一下系統(tǒng)的 ServiceRecord、NotificationManagerService 等相關(guān)源代碼,因為不是本文的重點,所以不做詳述。

嘮叨的分割線

到這里基本就介紹完了 黑、白、灰 三種實現(xiàn)方式,僅僅從代碼層面去講保活是不夠的,我希望能夠通過系統(tǒng)的進程回收機制來理解?;?,這樣能夠讓我們更好的避免踩到進程被殺的坑。

進程回收機制

熟悉Android系統(tǒng)的童鞋都知道,系統(tǒng)出于體驗和性能上的考慮,app在退到后臺時系統(tǒng)并不會真正的kill掉這個進程,而是將其緩存起來。打開的應(yīng)用越多,后臺緩存的進程也越多。在系統(tǒng)內(nèi)存不足的情況下,系統(tǒng)開始依據(jù)自身的一套進程回收機制來判斷要kill掉哪些進程,以騰出內(nèi)存來供給需要的app。這套殺進程回收內(nèi)存的機制就叫 Low Memory Killer ,它是基于Linux內(nèi)核的 OOM Killer(Out-Of-Memory killer)機制誕生。

了解完 Low Memory Killer,再科普一下oom_adj。什么是oom_adj?它是linux內(nèi)核分配給每個系統(tǒng)進程的一個值,代表進程的優(yōu)先級,進程回收機制就是根據(jù)這個優(yōu)先級來決定是否進行回收。對于oom_adj的作用,你只需要記住以下幾點即可:

  • 進程的oom_adj越大,表示此進程優(yōu)先級越低,越容易被殺回收;越小,表示進程優(yōu)先級越高,越不容易被殺回收
  • 普通app進程的oom_adj>=0,系統(tǒng)進程的oom_adj才可能<0

那么我們?nèi)绾尾榭催M程的oom_adj值呢,需要用到下面的兩個shell命令

ps | grep PackageName //獲取你指定的進程信息

這里是以我寫的demo代碼為例子,紅色圈中部分別為下面三個進程的ID

  • UI進程:com.clock.daemon
  • 普通后臺進程:com.clock.daemon:bg
  • 灰色保活進程:com.clock.daemon:gray

當然,這些進程的id也可以通過AndroidStudio獲得

接著我們來再來獲取三個進程的oom_adj

cat /proc/進程ID/oom_adj

從上圖可以看到UI進程和灰色?;頢ervice進程的oom_adj=0,而普通后臺進程oom_adj=15。到這里估計你也能明白,為什么普通的后臺進程容易被回收,而前臺進程則不容易被回收了吧。但明白這個還不夠,接著看下圖

上面是我把app切換到后臺,再進行一次oom_adj的檢驗,你會發(fā)現(xiàn)UI進程的值從0變成了6,而灰色?;畹腟ervice進程則從0變成了1。這里可以觀察到,app退到后臺時,其所有的進程優(yōu)先級都會降低。但是UI進程是降低最為明顯的,因為它占用的內(nèi)存資源最多,系統(tǒng)內(nèi)存不足的時候肯定優(yōu)先殺這些占用內(nèi)存高的進程來騰出資源。所以,為了盡量避免后臺UI進程被殺,需要盡可能的釋放一些不用的資源,尤其是圖片、音視頻之類的。

從Android官方文檔中,我們也能看到優(yōu)先級從高到低列出了這些不同類型的進程:Foreground process、Visible process、Service process、Background process、Empty process。

總結(jié)(文末有福利)

絮絮叨叨寫完了這么多,最后來做個小小的總結(jié)?;貧w到開篇提到QQ進程不死的問題,我也曾認為存在這樣一種技術(shù)??上野咽謾Croot后,殺掉QQ進程之后就再也起不來了。有些手機廠商把這些知名的app放入了自己的白名單中,保證了進程不死來提高用戶體驗(如微信、QQ、陌陌都在小米的白名單中)。如果從白名單中移除,他們終究還是和普通app一樣躲避不了被殺的命運,為了盡量避免被殺,還是老老實實去做好優(yōu)化工作吧。

所以,進程?;畹母痉桨附K究還是回到了性能優(yōu)化上,進程永生不死終究是個徹頭徹尾的偽命題!

補充更新

有童鞋問,在華為的機子上發(fā)現(xiàn)微信和手Q的UI進程退到后臺,oom_adj的值一點都沒有變,是不是有什么黑科技在其中。為此,我稍稍驗證了一下,驗證方式就是把demo工程的包名改成手機QQ的,編譯運行在華為的機子上,發(fā)現(xiàn)我的進程怎么殺也都是不死的,退到后臺oom_adj的值同樣不發(fā)生變化,而恢復原來的包名就不行了。所以,你懂的,手Q就在華為機子的白名單中。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

免费在线视频一区| 欧洲美女亚洲激情| 中文字幕一区二区三区在线视频| 精品一区二区综合| 国产成人精品av在线| 男插女免费视频| 四虎永久成年免费影院| 九九热在线视频免费观看| 日日噜噜夜夜狠狠视频欧美人| 久久高清无码视频| 久草在线资源网| 91大学生片黄在线观看| 91精品麻豆日日躁夜夜躁| 欧美人与性动交α欧美精品济南到| 中文字幕一区在线观看| 午夜精品亚洲一区二区三区嫩草| 这里只有精品电影| 国产精品99精品无码视亚| 777xxx欧美| 免费毛片小视频| av天在线播放| 91久久精品国产91久久性色| 精品久久久久av影院| y4480在线8影院| 99爱免费视频| 日韩综合久久| 国精品无码一区二区三区| 国产在线观看第一页| 日韩欧美在线观看视频| 日韩网站免费观看高清| av亚洲精华国产精华| 精品成人av一区二区在线播放| 欧美亚韩一区二区三区| 影音先锋国产在线| 欧美日韩视频精品一区二区| 日韩中文字幕网| 99热这里只有精品1| 亚洲精品国产熟女久久久| 特黄特黄一级片| 日本综合字幕| 久久精品国产99| 日韩精品一区二区三区中文在线| 精品免费av在线| 在线观看老湿视频福利| 精品国产一区二区三区四区四| 一区二区三区四区在线免费视频| 久久噜噜亚洲综合| 日韩欧美在线观看| 日韩欧美视频一区二区| 欧美大交乱xxxxxbbb| 久久免费黄色网址| 欧美人妖在线| 国产精品嫩草影院俄罗斯| va中文字幕| 欧美福利电影在线观看| 欧美日韩国产页| 日韩午夜一区| 亚洲丝袜精品丝袜在线| 国产精品久久久久久久久夜色| 天天操夜夜干| 国产偷自视频区视频一区二区| 男人用嘴添女人下身免费视频| 亚洲欧美电影一区二区| 国产一区红桃视频| 欧美精品123| 搡的我好爽在线观看免费视频| 成年人免费高清视频| 日本美女一区二区| 国产精品久久久久久久久免费丝袜| 日韩欧美视频在线| 三级黄色片在线观看| 亚洲视频手机在线观看| 九九亚洲精品| 欧美一激情一区二区三区| 男人的j进女人的j一区| 亚洲精品在线免费| 超级碰碰不卡在线视频| 日本a在线播放| 欧美黄页免费| 美女一区2区| 亚洲女厕所小便bbb| 亚洲精品国产品国语在线| 椎名由奈av一区二区三区| 性高潮久久久久久| 99av国产精品欲麻豆| 韩国三级视频在线观看| www.wu福利视频18| 亚洲综合久久网| 无码人妻一区二区三区精品视频| ㊣最新国产の精品bt7086| 国产欧美久久久精品影院| 免费无码不卡视频在线观看| 欧美精品videos另类日本| 国产一区二区三区成人欧美日韩在线观看| 开心色怡人综合网站| 91视频精品| 日本精品国产| 性欧美长视频| 欧美极度另类| 成人video亚洲精品| 日韩av一级电影| 91蜜桃在线视频| 亚洲一区二区在线看| www99xav| 欧美一级做a| 成人欧美一区二区三区白人| 精品国产aⅴ一区二区三区东京热| 在线观看成年人视频| 黄色三级视频在线| 69久久精品无码一区二区| 亚洲精品资源美女情侣酒店| 26uuu精品一区二区| 免费人成精品欧美精品| 成人影院在线播放| 免费观看成人www动漫视频| 欧洲美熟女乱又伦| 挪威xxxx性hd极品| 亚洲一区二区成人在线观看| 国产成人强伦免费视频网站| 日本一区二区网站| 久久综合香蕉| 日韩在线观看一区| 亚洲天天在线日亚洲洲精| 久久蜜桃资源一区二区老牛| 中文字幕日韩欧美一区二区三区| 福利电影导航| 久久综合一区| 懂色av中文一区二区三区| 韩国欧美亚洲国产| 最新国产热播激情视频| 欧美日韩国产精品一卡| 精品国产1区2区3区| 99re成人精品视频| 国产美女视频黄a视频免费| 国产成人在线视频免费播放| 国产久一一精品| 久久久一本精品99久久精品| 久久一区91| 狠狠色噜噜狠狠狠狠8888| 日本美女一区二区三区视频| 成人公开免费视频| 在线观看网站免费入口在线观看国内| 欧美深夜福利视频| 日韩少妇裸体做爰视频| 波多野结衣一区| 日韩乱码一区二区| 日韩视频中午一区| 中文字幕在线观看视频网站| 国产香蕉一区二区三区在线视频| 国产98色在线|日韩| 99福利在线| 性欧美极品另类| 狠狠色丁香婷婷综合影院| 深夜影院在线观看| 亚洲国产精品一区二区第一页| 亚洲人与黑人屁股眼交| 色域天天综合网| 欧美日韩视频在线一区二区| 欧美色欧美亚洲另类七区| 免费在线看黄| 欧美日韩性视频| 粉嫩av性色av蜜臀av网站| 久久久精品国产sm调教网站| 国产一区二区三区在线免费观看| 欧美精品videossex性护士| 人与人69性欧美三人交| 欧美性视频在线| 国产视频精品视频| 精品国产免费视频| 成人免费毛片在线观看| 在线观看国产一区二区三区| 亚洲国产欧美一区二区三区不卡| 日本不卡不码高清免费观看| 欧美性猛交99久久久久99| 超污视频在线播放| 嫩草伊人久久精品少妇av杨幂| 久久久免费精品| 亚洲男帅同性gay1069| 亚洲影院污污.| www在线免费观看| 日韩色视频在线观看| 在线观看视频亚洲| 极品束缚调教一区二区网站| 三级欧美韩日大片在线看| 成r视频免费观看在线播放| 欧美日韩在线一区| 91热门视频在线观看| xxx亚洲日本| 91看片淫黄大片91| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 婷婷国产在线综合| 午夜午夜精品一区二区三区文| 日本一级在线观看| 国产伊人精品| 一区二区在线免费播放| 国产精品欧美久久久久无广告| 亚洲欧洲激情在线| 亚洲欧美在线网| 免费成人美女女| 9lporm自拍视频区在线| 在线观看男女av免费网址| 美女日批在线观看| 日韩中文在线中文网在线观看| 国产福利一区二区三区视频在线| 中文字幕一区免费在线观看| 欧美特级一级片| 国内精品国产三级国产99| 久久69精品久久久久久久电影好| 日韩综合视频在线观看| bbw在线视频| 麻豆成人av| a级影片在线| 日韩欧美中文字幕在线播放| 欧美一区二区三区电影在线观看| 老熟妇高潮一区二区三区| 国产欧美va欧美不卡在线| 欧美精品一二三| 在线视频亚洲欧美| а√在线天堂官网| 91精品婷婷色在线观看| 亚洲激情校园春色| 美脚丝袜脚交一区二区| 精品久久99| 91视频免费观看网站| 少妇性bbb搡bbb爽爽爽欧美| 男生女生差差差的视频在线观看| 中文在线天堂库| 国产精品无码久久久久久| 欧美一级大片在线观看| 亚洲天堂aaa| 欧美精品第一区| 乱色588欧美| 亚洲精品videossex少妇| 西野翔中文久久精品字幕| 国产精品作爱| 水野朝阳av一区二区三区| 视频精品在线观看| 日韩成人精品一区二区三区| 亚洲高清激情| 制服丝袜成人动漫| 色www精品视频在线观看| 日本理论片午伦夜理片在线观看| 99久免费精品视频在线观78| 欧美疯狂party性派对| 国产夫妻自拍一区| 国色天香久久精品国产一区| 三年中国国语在线播放免费| 粉嫩嫩av羞羞动漫久久久| 亚洲线精品久久一区二区三区| 亚洲成人在线免费| 91精品婷婷国产综合久久蝌蚪| 日本少妇毛茸茸| av中文字幕网| 久久久久国产精品人| 老司机一区二区| 亚洲久久久久久久| 91精品丝袜国产高跟在线| 亚洲高清福利视频| 亚洲一区二区三区四区| 十八禁视频网站在线观看| 久久影视电视剧免费网站清宫辞电视| 午夜不卡影院| 午夜激情视频在线播放| 在线观看国产一区二区三区| 精品一区二区三区自拍图片区| 中文字幕不卡在线观看| 日韩大片在线播放| 综合激情网...| 色婷婷在线视频观看| 久久99精品久久久久久国产越南| 亚洲男女性事视频| 国产综合久久久久久| 免费在线一区观看| 日韩免费av一区二区| 日本在线视频一区| 免费一级欧美片在线观看网站| 成全在线观看免费完整动漫| 欧美日韩国产一区在线| 亚洲成年人影院在线| 色婷婷精品大视频在线蜜桃视频| 91麻豆福利| 亚洲综合在线电影| 欧美日韩大陆一区二区| 亚洲开心激情网| 琪琪亚洲精品午夜在线| 亚洲精品一区二区三区精华液| www.日韩av.com| 日韩一级视频| 在线亚洲日本| 亚洲成a人v欧美综合天堂| 欧美成人国产精品一区二区| 亚洲国产精品国自产拍av秋霞| 洋洋av久久久久久久一区| 亚洲伦理一区二区三区| 国产三级精品三级在线| 亚洲v在线观看| 污污的网站在线观看| 99久久一区三区四区免费| aaa国产精品| h视频在线免费看| 国产一区二区三区视频在线观看| 美女无遮挡网站| 黄网网址免费| 国产一区二区成人| 久久中文字幕导航| 91国产精品视频在线观看| 最好2018中文免费视频| 欧美在线视频免费观看| 欧美mv日韩| 人与牲动交xxxxbbbb高清| 国产黄色激情视频| 欧美性www| 日本中文字幕免费观看| 岛国视频免费在线观看| 一级α片免费看刺激高潮视频| 深夜福利免费在线观看| 国产成人久久精品麻豆二区| 国产一区国产二区国产三区| 亚洲国产国产亚洲一二三| 51精品视频| 福利一区二区三区四区| 日韩一区二区电影网| 国精品**一区二区三区在线蜜桃| 成人久久18免费网站漫画| 国产在线视频欧美一区| 亚洲午夜小视频| 不卡电影免费在线播放一区| 亚洲手机在线|