盤點流氓App駐留後台的奇異手段
本文轉自Pconline
和iOS相比,安卓是一個更加開放的平台,帶來了更多自由的同時,也容許了更多「法外之地」。App在安卓系統中的限制比iOS更小,這令安卓孕育出了很多流氓App。儘管Google一直嘗試對後台增添更多限制、理清安卓的生態,但流氓App們見招拆招,使出了各種喪心病狂的手段來駐留後台。流氓App駐留後台有哪些技巧?一起來看看吧。
很多App都會註冊大量的後台服務,這些後台服務會消耗額外的資源和電量
安卓系統的後台機制
我們先來談談安卓的後台機制,這可以讓我們更清晰地得知為何流氓App為何容易駐留在後台。安卓是一個基於Linux的操作系統,因此其後台機制也和Linux類似——一般情況下,返回桌面時程序並不會推出後台,而是在後台持續運行,當系統需要更多資源的時候,相應的程序才會被請出去。
安卓並不是隨便清理後台的進程的,在安卓系統中,App分為Foreground_App(前台應用)、Visiable_App(可見應用)、Secondary_App(二級應用)、Hidden_App(隱藏應用)、Content_Provider(內容提供器)、Empty_App(空應用)等狀態。當內存不足的時候,系統會優先終止Empty_App進程和服務,將內存釋放出去;內存再次吃緊,就開始對Content_Provider動手腳了,以此類推。因此,越重要的進程會越得到保留,越無關重要的進程會越被優先清理出內存,這方案乍看之下沒啥問題。
安卓把App狀態分成不同類型,自動管理後台是否駐留
然而事情並不盡如人意,流氓App之所以流氓,就是不守規則。安卓系統中留有太多餘地讓App在後台自由發揮了,就算是Android 6.0引進了Doze打盹機制、Android O倡導後台純凈(Background-free),流氓App們仍能不聲不響地在後台龍盤虎踞。如果沒有使用特別的殺後台工具或者對後台有特殊限制的ROM,流氓App們甚至能讓手機化身續航兩小時的暖手寶。
流氓App駐留後台技巧:亂註冊狀態
前面提到,安卓把App分為好幾個狀態,不過流氓App可不會遵守這些規矩,讓後台按照這些狀態來運行。例如,流氓App就可以通過startForeground來把自己註冊成為前台應用,讓自己的後台成為最高優先順序,永遠不會被系統幹掉。
安卓7.0對很多後台運行的App都在通知欄有公示,後來這些App不得不改變後台駐留的方法
不過,這個方法已經有了Google官方的應對,在安卓4.3以上的系統中,如果有App亂註冊這個狀態,通知欄就會顯示「XX正在後台運行」。儘管流氓App通過一些手段一度繞了過去,但在安卓7.0中Google封堵了該漏洞。如果你升級到了安卓7.0,某App在通知欄持續顯示「XX正在後台運行」,不用懷疑,這就是個流氓App。
流氓App駐留後台技巧:透明懸浮窗
這是個腦洞大開的一招,我們知道和iOS不同,App可以在系統中顯示懸浮窗,為用戶提供各種實時信息。而開了懸浮窗的App,會一直運行,進程不會被隨便清理掉。於是流氓App就在這方面動歪腦筋了,某流氓App會在設置一個1像素大小的透明懸浮窗,用戶是看不到的,但這懸浮窗的確存在。App退到後台後,由於有懸浮窗的存在,進程也得以保留。
這個方法也已經被Google所察覺,在新版的安卓系統以及很多第三方ROM中,App已經不能隨便申請到懸浮窗的許可權。
流氓App駐留後台技巧:亂請求喚醒
用過安卓的朋友都知道,流氓App最煩人的一點就在於胡亂自行啟動,這和流氓App們胡亂請求喚醒是密不可分的。安卓系統擁有喚醒機制,App可以同某些具體事件,觸發特定動作。例如到了時間,App可以觸發鈴聲;又例如連上了網路或者間隔一段時間,App可以觸發數據同步動作。這些動作都需要喚醒App才能運行,於是流氓App就把頻頻使用「Alarm」、「Sync Adapter」等周期性任務喚醒自己,讓自己不斷在後台啟動,這也是很多殺後台App無法徹底幹掉流氓App後台進程的原因。
流氓App通常利用廣播接收器觸發後台自啟動
對此,Google官方也嘗試使用對齊喚醒機制來解決。在安卓6.0中Google引入Doze機制,讓後台進程盡量在統一的周期中同時喚醒,使CPU得到儘可能長的休眠時間。不過,這個機制並不夠激進,需要手機無操作靜止較長時間才會工作,總體而言效果有限。如果用戶使用手機頻度較大,Doze機制甚至不會生效,流氓App們依然會不斷吞噬著手機電量。
安卓6.0引入的Doze模式,旨在讓App統一喚醒,但並不能徹底解決問題
流氓App駐留後台技巧:進程相互喚醒
除了利用安卓系統的喚醒機制,流氓App們還可以利用進程來相互喚醒。一方面,流氓App可以在後台註冊多個進程,就算某個進程被幹掉,也可以用其他進程來喚醒——如果你仔細觀察,可以發現很多App都在後台註冊了不止一個進程,為的就是不斷喚醒;另一方面,流氓App們還可以抱團相互喚醒!當你開啟了A應用後,它的進程可能會喚醒B應用,B應用的進程接而又會喚醒C應用,這種「鏈式喚醒」在國內的App中尤為常見,令人防不勝防。
用綠色守護能觀察到很多App都是由其他App喚醒的
「鏈式喚醒」如此常見,是有原因的。由於Google服務的缺失,很多國內App為了實現推送和廣告等功能,不得不使用一些第三方的SDK。這些第三方的SDK往往就會讓App抱團喚醒,不少App其實不想耍流氓,但用了這些第三方SDK,也不得不變流氓。當然,解決方法還是有的,有心的開發者可以在使用流氓SDK的時候,接入Project Condom這個開源庫,避免「鏈式喚醒」。
Google也知道進程喚醒的問題所在,於是安卓8.0的開發規範要求App一旦進入後台,需要在短時間內停止所有的後台服務,也不可以隨便啟動新的後台服務。至於這個效果如何,目前安卓8.0尚未普及,還有待觀察。
流氓App駐留後台技巧:沆瀣一氣
這應該就是終極的大招了!如果流氓App本身就和ROM有勾結,這App無疑就獲得了最高通行權,無論如何也不會被幹掉。例如,你何時看到過原生安卓會幹掉Google Play(別說Play服務不流氓)?國內的一堆ROM也不會幹掉自家的流氓推送服務,還得靠推送來賣廣告呢。
面對這種情況,用戶基本上是無能為力的。或許基於AOSP的第三方ROM可以解決問題,但並不是所有設備都有條件刷機。
總結
實際上,安卓的生態已經近似於惡性循環,流氓App們不斷找方法駐留後台,而各種ROM為了對付流氓App,對後台限制又日益收緊,這令安卓漸漸缺失了最初的賣點。為此,業界也在想辦法解決流氓App的問題,例如就有開發者提出了Android綠色應用公約,國內也打算聯合開發者們建立統一的App推送機制,減少App後台駐留的必要性,希望安卓的生態最終還是可以越來越好吧。
點擊展開全文


※vivo成功挑戰吉尼斯世界紀錄,新機馬上發布
※年輕人的第一把智能鎖-果加互聯網智能鎖F0|大家測(第237期
※iPhone8起售價999美元,9月12日正式發布
TAG:科技美學 |
※青年藝術家的「出走」 長城腳下的公社X ArtDepot藝術倉庫駐留邀請展
※自在院墅 天地之居:每個角落陽光駐留一整天
※在露台點一杯夏日午後的咖啡,證明也曾在巴黎駐留
※「配角之後」金燕玲:感謝香港,絕望時讓我駐留
※時光駐留之地——與大都會的邂逅
※前世的它 今世的我 悠悠古鎮駐留千年美景 粉牆瓦黛下的周庄
※你為我綻放,我為你駐留-米蘭花開
※「月宮365」實驗再換班,艙內駐留200天創世界紀錄
※不走了,「巡航」南部海域後,一國宣布戰艦將長期駐留,不是美國
※中美俄等14國構想「載人登月路線圖」:2030年實現月球長期駐留
※戰爭風險陡然劇增,繼油輪遇襲後軍事基地也遇襲,內部有美軍駐留
※4名志願者在「月宮一號」實驗艙連續駐留200天創造世界紀錄
※A&T彩虹計劃《辨色》藝術家駐留項目展:每個人都是藝術家
※外媒:第一批上去火星會是一群冒險家,而駐留居民或是半智能人
※NASA想在月球建立核反應堆 為航天員長期駐留提供電力
※科顏氏幫您「點亮」雙眸,「駐留」青春
※工控系統網路入侵平均駐留時間:200天以上
※挑戰俄羅斯,美國杜魯門號航母戰鬥群將駐留地中海
※這頂鳳冠,讓無數遊客駐留不前
※唯一駐留的釘子戶居然是狗,知道它留守的原因後淚奔