安卓是Google發起的,但現在安卓的一些行徑,連Google也看不下去了。
近日,安卓發起了一項針對安卓的調查——Google認為很多OEM安卓機廠商,其推行的安卓系統存在嚴重的殺后臺問題,App難以在后臺存活。
Google最近和一些安卓廠商不對付了
Google認為,現今很多OEM的安卓系統都違背了Google的政策,令App無法在后臺持續運行。
雖然大多數安卓應用并不需要在后臺保留進程,但也有部分類別的確有此類需求,例如健康記錄App,需要持續記錄數據。
然而,部分OEM安卓系統卻無法滿足此類需求,安卓開源項目AOSP的錯誤跟蹤器就曾經揭露出某些OEM廠商濫用安卓機制,禁止第三方應用在后臺運行,甚至還殺死了AccessibilityService這個系統級別的無障礙服務進程。
Google實際上為安卓系統制定了殺后臺的規則,但OEM廠商們卻在這方面并不透明,開發者和用戶無法知道OEM安卓到底會殺掉怎么樣的App后臺。
有時候,OEM安卓廠商會將某些App加入白名單,例如部分社交和通訊軟件,以確保消息的及時推送。
但這些機制對于用戶和開發者來說,相當于黑箱,人們無法判斷到底哪個App能在后臺運行、哪個不能,最終的體驗并不如人意。
安卓基于Linux系統,本身擁有完善的多后臺機制,在誕生之初其桌面級的“真后臺”是玩家津津樂道的賣點。
近年來安卓機的內存越來越大,甚至已經堆到了16G的容量,和桌面PC相比也不遑多讓。但為何安卓生態中,殺后臺的現象反而變嚴重了?這就來簡單聊聊這個問題吧。
為什么安卓系統要激進殺后臺?
原生安卓系統支持App后臺保留進程,但傳統上也有一套循序漸進的后臺退出機制。在傳統上,安卓系統會為App進程分配不同的狀態,例如Foreground_App(前臺應用)、Visiable_App(可見應用)、Secondary_App(二級應用)、Hidden_App(隱藏應用)、Content_Provider(內容提供器)、Empty_App(空應用)等狀態。
當內存不足的時候,系統會優先終止Empty_App進程和服務,將內存釋放出去;內存再次吃緊,就開始對Content_Provider動手腳了,以此類推。
安卓App不同的狀態,系統會據此判斷殺進程的優先級
但是,并不是每個App都老老實實為進程注冊合理的狀態的。很多安卓App會通過一些手段,來修改自己進程的屬性,來長期駐留后臺。
例如,一些流氓App將startForeground來把自己注冊成為前臺應用,讓自己的后臺成為最高優先級,永遠不會被系統干掉;又例如,有流氓App會利用安卓的懸浮窗機制,設置一個1像素大小的透明懸浮窗,讓App始終處于激活狀態,避免后臺被殺;又例如,流氓App們抱團取暖,后臺進程利用安卓系統的周期性任務進行鏈式喚醒,開啟一個App等于喚醒N個App的后臺……
流氓App駐留后臺的經典方法——利用廣播接收器觸發后臺自啟動
App們的這些行徑,消耗了額外的資源,對續航和流暢的負面影響肉眼可見。
為此,官方的安卓系統也作出了一些應對。例如針對App亂注冊startForeground狀態,安卓7.0之后會在通知欄強制顯示“XX正在后臺運行”;又例如安卓收緊了懸浮窗權限,使用懸浮窗必須開啟相應開關;而安卓11則很大程度上了App之間的鏈式喚醒等等。
安卓7.0對很多后臺運行的App都在通知欄有公示,后來這些App不得不改變后臺駐留的方法
但道高一尺魔高一丈,安卓系統的很多限制后臺機制,需要App使用較高版本的TargetAPI才能生效,而大量App仍使用老舊的開發規范,但用戶卻不可能拋棄其中的很多App。
因此,App強行駐留后臺的行徑,對于用戶的負面影響是實打實的,既然Google官方安卓無法做到,那就只能由第三方安卓ROM來動手了——如果哪個牌子的安卓不做,就會在用戶中落下“又卡又熱又耗電”的壞口碑。
因此,OEM安卓們殺后臺,一個比一個狠。有其是在國內,一些安卓ROM甚至默認定時殺后臺,即使RAM資源充足,絕大部分App也無法保留后臺進程。安卓ROM激進殺后臺的風氣,就此產生。
為什么App要強行駐留后臺?
安卓ROM激進殺后臺是“果”,而App以各種行徑強行駐留后臺則是“因”。而這一切的“根”又是什么?恐怕和安卓的生態環境有關。
和蘋果不同,安卓最初并沒有提供App統一推送機制,這意味著每個App如果需要接受后臺消息,那就需要自行駐留進程,以隨時接收消息推送。
不過這些年Google也對此作了改進,引入了GCM/FCM機制,App可以調用Google服務框架GMS,通過Google的服務器實現統一的消息轉發,App的消息推送可以由系統接管,整個過程App都無需保留后臺,體驗類似iOS。
安卓上的FCM機制,類似于iOS的統一消息推送,但前提是系統和App接入Google服務
然而,這一套機制并非是強制性的,如果App不接入GMS,甚至不上架Google Play,那么完全可以無視這一切。而在以國內為典型的應用環境下,GMS實際上并不可用,App自行駐留進程、接受消息推送就成為了必選項。
因此,國內的安卓App使用了尤其多的手段,在安卓系統中駐留進程,這實際上很大程度是不得已而為之,當然也有商業上的考慮。而針對國內App種種駐留后臺的手段,國內的安卓ROM為了保證續航和流暢,又不得不采取了更多的一刀切殺后臺手段,這就造成了現今的情況。
為什么Google要整治安卓ROM殺后臺?
安卓ROM整治了App后臺駐留,帶來了更好的續航和性能表現。然而對于用戶而言,這并不是體驗的全部。很多用戶就遇到了這樣的情況——使用某個App,例如音樂App聽歌,切到后臺一會兒,音樂就停了,因為系統把音樂App進程給殺了。但用戶可不知道這是系統做的,只會認為這是音樂App的毛病。一時間,這音樂App就榮獲差評。
Google在Play商店中觀察到了不少這樣的差評,而這顯然不是開發者的錯——在App駐留后臺越來越卷的風氣下,老老實實按照規范開發的App,反而后臺更容易被系統強行中斷,反映在用戶實際體驗上就是該App在后臺好端端就沒了,用戶覺得這App肯定有Bug。
為了呼吁系統不要亂殺App后臺,開發者們甚至還專門做了一個“求別殺我的App”的App
開發者無端背鍋,而這問題顯然又不是開發者能解決的。Google不得已親自插手,來整治安卓ROM亂殺后臺的現象。
目前Google正邀請第三方應用開發者提供反饋,想知道哪些手機品牌機型殺后臺嚴重,以便進行更加深入的調查。
安卓廠商要如何應對?
由于眾所周知的原因,Google并不在國內展開賬號相關的服務,國內的安卓生態是和Google脫節的。因此,對于Google的相關整治,應該對國內的安卓產品影響不大。
但是,也有不少國內安卓廠商開展海外業務,在海外市場,Google的話語權舉足輕重。Google有可能對安卓廠商施加壓力,以讓安卓廠商改變系統的殺后臺策略。在這樣的背景下,國內外的機型分別采用不同的殺后臺策略,就顯得很有必要了。在用于國外機型的國際版ROM中,安卓廠商應該重視Google的意見,對殺后臺策略進行一定程度的修改。
不過我們也要意識到,安卓ROM激進殺后臺造成的負面體驗,在國內也是存在的。但目前國內的安卓生態迫使安卓廠商出此下策,要如何改變現狀?
統一推送聯盟有望從根源上解決系統殺后臺和App需要后臺保持推送服務的矛盾
這兩年,工信部聯合了主流安卓廠商,共同推進統一推送聯盟。App接入了相關體系后,即可實現系統級推送,無需駐留后臺也可以接收消息。統一推送服務需要安卓ROM和App同時支持,好消息是,目前統一推送服務已經覆蓋了華為、OPPO、vivo、小米等多家國內品牌,相關標準與成果也將納入中國信通院與中國互聯網協會共建的“中國移動基礎服務平臺”(China Mobile Service,CMS)的相關體系之中,并在2021年中國互聯網大會上正式發布。希望統一推送聯盟能一改國內App駐留后臺的風氣,讓安卓ROM沒有激進殺后臺的理由吧。
總結
總的來說,安卓ROM之所以如此激進殺后臺,是和安卓App的行徑息息相關的,而這一切的根源又是缺乏統一推送服務的安卓生態。隨著國外Google對安卓掌控力的加強,以及國內統一推送服務的普及,情況有望得到改觀,希望安卓ROM和App們未來能有更好的用戶體驗吧。
評論