和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已經不能隨便申請到懸浮窗的權限。