跟上腳步,進入後臺執行新時代

做者: Luiz Gustavo Martins, 合做夥伴開發技術推廣工程師,合做夥伴 DevRel 團隊android

本文爲 Android 電量管理 系列連載的第三篇,但願您能在閱讀過程當中收穫設備續航方面的戰略洞見和實踐指導。web

隨着近幾年來 Android 的不斷髮展,Google 逐步增強了對於後臺執行的優化和限制。爲了開發出現代化的 Android 應用,開發者須要學習如何經過最新方式來管理後臺任務。服務器

系統如何斷定應用處於後臺?

在理解後臺執行這個概念以前,咱們先來看看 Android 系統是如何定義前臺應用的。當應用知足如下任意條件時,系統會判斷應用處於前臺:網絡

若是以上條件均不知足,應用將被視爲處於後臺。app

後臺執行的相關行爲變動

在後臺運行應用會消耗設備的有限資源,如內存或者電池電量,進而影響用戶的使用體驗,好比說,後臺任務可能會縮短設備的續航時間,或者在用戶玩遊戲、看視頻或拍照時形成系統卡頓。框架

爲了改善續航表現和用戶體驗,Android 在版本演進的過程當中,針對後臺執行進行了不一樣程度的限制,其中包括:ide

  • 低耗電模式和應用待機模式: 若是設備未插接電源,處於空閒狀態一段時間且屏幕關閉,系統會進入低耗電或者待機模式,並對應用行爲施加相應限制;
  • 後臺位置限制: 對後臺應用獲取用戶當前位置的頻率進行限制;
  • 後臺服務限制: 限制應用在後臺運行服務,並禁止應用經過隱藏/不可見方式調用 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 官方文檔」查看更多信息

更強續航,盡在 Android 9 Pie!

相關文章
相關標籤/搜索