作者: Luiz Gustavo Martins, 合作伙伴開發技術推廣工程師,合作伙伴 DevRel 團隊
本文為 Android 電量管理 系列連載的第三篇,希望您能在閱讀過程中收穫裝置續航方面的戰略洞見和實踐指導。
隨著近幾年來 Android 的不斷髮展,Google 逐步加強了對於後臺執行的優化和限制。為了開發出現代化的 Android 應用,開發者需要學習如何通過最新方式來管理後臺任務。
系統如何判定應用處於後臺?
在理解後臺執行這個概念之前,我們先來看看 Android 系統是如何定義前臺應用的。當應用滿足以下任意條件時,系統會判斷應用處於前臺:
- 具有一個可見的 Activity,不論該 Activity 處於 started 或是 paused 狀態
- 具有一個前臺服務
- 另一個前臺應用已關聯至該應用,不論是通過繫結到它的一個服務,還是通過使用它的一個內容提供程式。比如,當別的前臺應用或者系統繫結了該應用的以下服務時,那麼該應用處於前臺:
如果以上條件均不滿足,應用將被視為處於後臺。
後臺執行的相關行為變更
在後臺執行應用會消耗裝置的有限資源,如記憶體或者電池電量,進而影響使用者的使用體驗,比如說,後臺任務可能會縮短裝置的續航時間,或者在使用者玩遊戲、看視訊或拍照時造成系統卡頓。
為了改善續航表現和使用者體驗,Android 在版本演進的過程中,針對後臺執行進行了不同程度的限制,其中包括:
- 低耗電模式和應用待機模式: 如果裝置未插接電源,處於空閒狀態一段時間且螢幕關閉,系統會進入低耗電或者待機模式,並對應用行為施加相應限制;
- 後臺位置限制: 對後臺應用獲取使用者當前位置的頻率進行限制;
- 後臺服務限制: 限制應用在後臺執行服務,並禁止應用通過隱藏/不可見方式呼叫 CPU 或網路資源;
- 近期新增特性及優化項: (1) 應用待機群組: 限制非活躍應用對裝置資源的呼叫; (2) 後臺限制: 當系統檢測到應用出現不良行為時,系統會向使用者詢問是否要限制該應用在後臺訪問裝置資源; (3) 省電助手功能優化。
使用案例及解決方案
開發者在選擇後臺執行工具前,首先要對應用需求和限制場景有個清晰的瞭解,我們建議您參照以下流程圖,為應用制定最佳的後臺決策:
- 作為 Android 推薦的後臺管理工具,WorkManger 考慮了系統內的所有後臺執行限制。如果您需要確保推遲的任務一定會被執行,請務必呼叫 WorkManager。該 API 允許您排程任務 (單次執行或迴圈執行) ,組合任務和構成任務鏈。您還可以新增任務執行的約束條件,例如:當裝置空閒或充電時才可以觸發,或者當內容提供程式發生變更時才可以執行。
以上傳日誌為例,您需要依次建立以下兩個工作請求,才可以將壓縮後的日誌檔案上傳至伺服器:
- 第一步:壓縮檔案。在此步驟中,您可以新增約束條件 “當裝置充電時,任務才可以被執行”。
- 第二步:向伺服器上傳檔案。在建立此請求時,您應該新增 “需要聯網”這一約束條件,指定任務僅在裝置連線到有效網路時才會被觸發。
將任務編入佇列後,WorkManager 會在約束條件滿足的情況下,即當應用可以訪問所需資源時,才會執行這兩個任務。
WorkManger 的另一個優勢在於它可以與 Android 的電量管理特性協同工作。假設某個任務的指定執行時間恰好落在低耗電模式時段內,那麼 WorkManager 便會在維護視窗時段 (如果此時約束條件已滿足,或裝置暫時退出了低耗電模式) ,嘗試執行該任務。
- 如果任務由外部事件觸發且執行時間較長,例如同步新資料,請先使用 Firebase Cloud Messaging 通知您的應用,然後再呼叫 WorkManager 建立同步資料的工作請求。您可以閱讀《使用 FCM 訊息向使用者傳送通知》,獲取更多詳情。
- 如果應用需要立刻執行一個由使用者發起的任務,即使使用者退出應用或關閉螢幕 (如音樂/視訊重放或者導航) 也不會影響任務的執行,請您使用前臺服務。(我們將在下一篇連載中深度剖析該使用案例,敬請期待!)
- 如果您需要在某一特定時間執行一個無法被推遲的任務,且該任務會觸發操作 (action) 並涉及使用者互動,請呼叫 AlarmManager 中的 setExactAndAllowWhileIdle 方法。常見的定時任務包括:
- 服藥提醒
- 電視節目開始前,向使用者傳送的提醒通知
在觸發標準鬧鈴後,您會有幾秒鐘的時間完成工作,此時應用可能無法訪問網路 (例如,系統處於低耗電模式,或者應用被歸入某一待機群組)。如果您必須訪問網路,或者任務執行時間較久,請呼叫 WorkManager。每當喚醒鬧鐘被觸發後,裝置就會退出低電量模式並持有一個區域性喚醒鎖,而長時間持有喚醒鎖會嚴重影響裝置的續航時間。建議您通過 Google Play 管理中心提供的 Android Vitals 來監測應用是否存在過度喚醒的問題。
總結:
合理的後臺執行策略可以幫助您開發出卓越的應用,在打造完美使用者體驗的同時,為裝置保駕 “續” 航。如果您想進一步瞭解後臺執行的相關訊息,請訪問 Android 開發者官網。
請注意:WorkManager 目前只發布了公共預覽版,您可以繼續使用 JobScheduler 作為替代方案,不過和 WorkManger 相比,JobScheduler 有更多的侷限。 JobScheduler 屬於 Android 框架的一部分,它僅在 API ≥ 21 的系統上可用;而 WorkManager 則支援 API 14 及更高版本。
點選這裡 前往“Android Developers 官方文件”檢視更多資訊