安卓12上線 華爲缺席首發名單 鴻蒙VS安卓孰優孰劣?

原標題:谷歌也看不下去了,安卓內存巨大但爲何還殺後臺 

安卓是 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 們未來能有更好的用戶體驗吧。

相關文章