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

玩家點(diǎn)評 (0人參與,0條評論)
熱門評論
全部評論