每一次 Android 大版本更新都會帶來不少底層機(jī)制的更新,其中最為重要、也是用戶最為關(guān)注的部分,除了界面設(shè)計(jì)應(yīng)該就是「性能與續(xù)航」了。
具體到今年剛剛發(fā)布的 Android 13 開發(fā)者預(yù)覽版,新增的「前臺服務(wù)管理器」尤為令人矚目。
▍任務(wù)、活動與服務(wù)
在 Android 系統(tǒng)上,前后臺的區(qū)分其實(shí)相當(dāng)符合直覺:用戶看不到的就是后臺,其余看得到的就是前臺。但對我們這些日常操作主要是「打開應(yīng)用、切換多任務(wù)、劃走應(yīng)用卡片」的用戶來說,「服務(wù)」這個概念就有點(diǎn)不好理解了。
讓我們把應(yīng)用拆開——大部分時候,和我們產(chǎn)生交互的其實(shí)都只是應(yīng)用中的一部分,這些不同的交互界面我們稱之為「活動窗口」;在活動窗口之外,應(yīng)用還可以自己獨(dú)立運(yùn)行一項(xiàng)「服務(wù)」,根據(jù) Google 的官方文檔介紹,服務(wù)是一種可在后臺執(zhí)行長時間運(yùn)行操作,而不提供界面的應(yīng)用組件。
典型的前臺服務(wù),包括音樂播放、健身記錄、位置共享、語音或視頻通話等。對于前臺服務(wù),系統(tǒng)會盡可能地將它們通過通知系統(tǒng)暴露給用戶。
以照片備份上傳為例,一旦開始備份,OneDrive 便會彈出一條通知,告知用戶照片備份上傳的具體進(jìn)度,這就是一個典型前臺服務(wù)通知。這個時候如果我們在多任務(wù)界面將 OneDrive 的活動窗口劃去,那么這條通知依然存在、備份也會進(jìn)行下去。當(dāng)備份完成的那一刻,這個服務(wù)也就走到了它的時間終點(diǎn),通知也會自動消除。
所以如果日后打開應(yīng)用時冷不丁冒出一條「正在同步……」的通知,或是拍完照片后彈出一條「正在優(yōu)化照片」的通知,不用感到意外,這說明系統(tǒng)和應(yīng)用的協(xié)作一切正常。
至于后臺服務(wù)……用戶甚至都不會感知到自己的手機(jī)跑了哪些后臺服務(wù),且 Google 傾向于讓應(yīng)用把長期的后臺任務(wù)交給系統(tǒng)來執(zhí)行,就像在 iOS 上那樣,就需要另開一篇文章聊這事兒了。
前臺服務(wù)其實(shí)相當(dāng)常見
▍為什么要限制前臺服務(wù)
通過通知系統(tǒng)來告知用戶,讓應(yīng)用得以獲取用戶的注意焦點(diǎn)來提升運(yùn)行優(yōu)先級,并最終得以完成任務(wù)。在我看來這是很聰明的做法,如今這樣的機(jī)制也已經(jīng)成為應(yīng)用確保任務(wù)完成的重要手段。
不過從上面的介紹中也不難看出,前臺服務(wù)主要有兩大特點(diǎn):
即使用戶停止與應(yīng)用的交互,仍能繼續(xù)運(yùn)行
執(zhí)行過程中必須顯示通知
所以將二者結(jié)合起來可以得出的另一種事實(shí)卻是,只要應(yīng)用保證通知正常顯示,它的前臺服務(wù)就能持續(xù)保持運(yùn)行。
因此同樣的機(jī)制如果被濫用,也是有可能造成大量系統(tǒng)資源浪費(fèi)的。在現(xiàn)實(shí)世界中,各類魔改 UI 幫助用戶「收納」通知不說,應(yīng)用本身可能也會彈出具有迷惑性的通知(比如偽裝成天氣數(shù)據(jù))來保證自己的服務(wù)持續(xù)存活。更不用提大部分用戶對「應(yīng)用掛個通知就能持續(xù)運(yùn)行」這件事情毫無概念了。
針對這類情況,必要的檢測和停用手段是必須的。Android 13 這次引入的前臺服務(wù)管理器終于補(bǔ)上了這一環(huán)。
防范管控的第一步,自然是先將所有前臺服務(wù)的應(yīng)用羅列出來。Android 13 的快速開關(guān)面板在重新布局的同時,底部也多出了一欄「前臺服務(wù)管理器」,點(diǎn)擊展開后即可看到當(dāng)前正在活躍的應(yīng)用,點(diǎn)擊對應(yīng)的「停止」按鈕就能一鍵讓應(yīng)用停止運(yùn)行,可謂是相當(dāng)「快準(zhǔn)狠」的管理方式。
其次 Android 系統(tǒng)也會幫助用戶對前臺服務(wù)進(jìn)行監(jiān)督,具體的機(jī)制是,在以 24 小時為單位的時間長度內(nèi),如果某應(yīng)用的前臺服務(wù)運(yùn)行超過 20 小時,系統(tǒng)就會發(fā)送通知告訴「XX 已經(jīng)長時間后臺運(yùn)行,點(diǎn)擊查看詳情」。這時點(diǎn)擊通知也會跳轉(zhuǎn)到上述前臺服務(wù)任務(wù)管理器當(dāng)中。
根據(jù) Android 13 現(xiàn)階段的設(shè)計(jì),針對同一應(yīng)用這樣的警告通知不會在 30 天內(nèi)重復(fù)出現(xiàn)。另外也不是所有應(yīng)用都會出現(xiàn)在前臺服務(wù)管理器中,系統(tǒng)級應(yīng)用、緊急安全相關(guān)應(yīng)用不會出現(xiàn)在這個列表中;部分應(yīng)用會出現(xiàn)在這個列表中但沒有「停止」按鈕,比如激活設(shè)備所有方的應(yīng)用、撥號應(yīng)用等。
▍與「劃卡強(qiáng)殺」的區(qū)別
在關(guān)于前臺服務(wù)管理器的相關(guān)文檔中,我們也得以第一次看到現(xiàn)代 Android 對「多任務(wù)界面上劃應(yīng)用卡片」這個行為的定義,以及它和前臺服務(wù)管理器的實(shí)際區(qū)別。
早年黑域、綠色守護(hù)和部分廠商的「劃卡強(qiáng)殺」其實(shí)更接近最右側(cè)的 Force stop,也就是強(qiáng)行停止?,F(xiàn)在進(jìn)入到應(yīng)用管理的詳情頁也依舊能夠看到這個按鈕,被強(qiáng)行停止的應(yīng)用會停止一切活動,一般來說不能再自行啟動,只能用戶手動或其余應(yīng)用拉起才能恢復(fù)運(yùn)行。
從這張表也可以看出,多任務(wù)界面真真切切變成了「應(yīng)用運(yùn)行歷史記錄」,而非代表應(yīng)用的實(shí)際運(yùn)行狀態(tài)。劃走卡片只是取消了歷史記錄以及清走「活動窗口」,應(yīng)用并不會立刻從 RAM 離開,理論上來說可以繼續(xù)保留通知、播放媒體。
前臺服務(wù)管理器的停止按鈕除了會暫停前臺服務(wù),也會將應(yīng)用從 RAM 中驅(qū)離。需要注意的是,此時應(yīng)用只是停止了運(yùn)行,并不會從多任務(wù)窗口中移除,這一考慮或許是為了方便用戶快速恢復(fù)任務(wù),同時減少系統(tǒng)資源消耗。
▍結(jié)語
閱讀近兩個版本的 Android 開發(fā)指南文檔,給我最大的感受就是 Google 試圖讓系統(tǒng)機(jī)制來接管應(yīng)用的活動、服務(wù)進(jìn)程等,而不建議開發(fā)者自己處理。由系統(tǒng)接管具體行為的做法不僅可以減少應(yīng)用對系統(tǒng)資源、權(quán)限的濫用,同時也能有效保護(hù)用戶隱私,這一點(diǎn)隔壁陣營應(yīng)該早有實(shí)踐。
只是現(xiàn)階段的文檔口徑都只是「建議」,希望 Google 未來可以一步步落實(shí),讓 Android 系統(tǒng)真正轉(zhuǎn)變?yōu)椤溉藱C(jī)交互」的操作系統(tǒng)。
關(guān)鍵詞: 前臺服務(wù) 系統(tǒng)資源 任務(wù)界面