1. 程式人生 > >智能作業調度

智能作業調度

androi git read 有用 manage 譯文 pat 文檔 錯誤

**本文章為官方文檔譯文,如果錯誤,請指正**

智能作業調度

  現代應用程序可以在用戶交互的直接流程之外異步執行其許多任務。這個異步任務的一些例子是:

  • 更新網絡資源
  • 下載信息
  • 更新後臺任務
  • 安排調用系統服務

  智能調度這些工作可以提高應用程序的性能,以及系統健康方面,例如電池壽命。JobScheduler為你做這個調度工作。

  有一些API你可以使用以調度後臺工作。這些選項中的主要職責是 JobScheduler。JobScheduler API允許你指定執行任務的穩定條件,以及整個設備的集中式任務調度,已獲得最佳的系統運行狀態。JobScheduler也提供高度可擴展的功能:它適用於像清楚緩存等這樣的小的功能,也使用於像同步數據庫到雲端這樣的大功能。

  除了JobScheduler,還有其它一些機制可以幫助你的程序調度工作。他們包括:

  • AlarmManager
  • Firebase JobDispatcher
  • SyncAdapter
  • Additional Facilities

  此頁簡單介紹了JobScheduler和其它一些API,它們能幫助應用程序調度工作,以最大化程序性能和系統運行狀態。

Android框架JobScheduler

  JobScheduler是Android框架API,以實現調度任務或者工作。JobScheduler在Android5.0(API層級21)第一次引入,並且保持積極發展。尤其,Android7.0(API級別24)增加了基於ContentProvider改變來觸發作業的功能。

  JobScheduler在平臺中實現,它可以收集有關需要在所有程序中運行的作業信息。該信息在同一時間或者差不多時間用於作業調度。以這種方式執行分批作業,允許設備進入並保持更長的休眠狀體,保持電池壽命。

  你可以通過註冊作業來使用JobScheduler,並制定他們對於網絡和時間的要求。然後,系統在適合的時間優雅的調度執行作業。同時,如果需要,它也遵循Doze and App Standby限制來推遲作業執行。JobScheduler提供很多方法來定義作業執行條件。

  假如你的應用程序目標為Android5.0(API層級21),我們建議你使用JobScheduler去執行後臺任務。更多信息關於JobScheduler,請參考其API參考文章。

AlarmManager

  AlarmManager是系統提供的另外一種調度任務的選擇。如果應用程序需要發送通知或者設置鬧鈴,此時該API非常有用。

  你應該僅僅當必須在特定時間執行任務的時候才使用該API,但不要求像JobScheduler允許你指定其它更加強大的執行條件,例如設備空閑和充電檢查。

Firebase JobDispatcher

  Firebase JobDispatcher是一個開源庫,提供類似於Android平臺中JobScheduler的API。Firebase JobDispatcher作業針對Android版本低於5.0(API層級21)應用程序的JobScheduler兼容性層。

  Firebase JobDispatcher支持用戶使用Google Play服務作為調度(運行)作業的實現,同時這個庫也允許你定義和使用其它的實現:例如,你可能決定使用JobScheduler或者編寫自定義自己的代碼。因為這些多功能性,我們建議你使用Firebase JobDispatcher,假如你的APP目標Android版本是低於5.0的(API層級21)。

  更多關於Firebase JobDispatcher,請參考其文檔和源代碼。

附加工具

  除了上述API和庫之外,還有同步適配器和服務,可以幫助你的應用程序在特定條件下更好,更強壯的運行。

SyncAdapter

  該框架繼續提供了SyncAdapter類以管理在設置和服務器之間同步數據的任務。同步適配器是特別為在設備和雲端同步數據設計的,你應該僅僅只在此種任務中使用它們。同步適配器比上面提到的庫和API有更加復雜的實現,因為它至少需要一個偽造的authenticator和content provider實現。因為這個原因,一般不應該創建同步適配器僅僅為了在後臺同步數據到雲端。你應該盡可能的使用JobScheduler,Firebase JobDispatcher或者GCM Network Manager替代。

  在Android N(API層級24),SyncManager在JobScheduler之上。如果需要其提供的附加功能,則只應使用SyncAdapter類。

Services

 服務框架允許你在後臺執行長時間運行的操作。我們建議使用前臺服務執行那些需要為用戶駐留的任務,例如播放音樂。綁定服務還可以用於各種情況,例如,僅當用戶在一個fragment或者activity的頁面時才需要運行服務。

 你應該避免為那些無限制時間或者周期性任務開始的服務,因為他們持續使用設備資源即使當他們不再執行任務的時候。相反,你應該使用該頁面描述的其它解決方案,並提供本機生命周期管理。開始使用服務僅僅作為最後的手段。Android平臺可能在將來不再支持服務。

附加點

  無論你采用何種解決方案,請記住以下幾點:

  • 互聯網門戶網站,VPN和代理會造成互聯網連接檢測問題。一個庫或者API可能認為網絡可用,但是你的服務可能無法訪問。正常失敗,並盡可能少的重新安排任務。
  • 根據你為運行任務分配的條件,例如網絡可用,在任務觸發之後,可能會發生改變,以便不在滿足該條件。在這種條件下,你的操作可能失敗並且重復出現。因此,你應該編寫後臺邏輯任務,以註意任務的持續失敗,並執行指數退避以避免無意中資源的過度使用。
  • 請記住使用指數退避當重復安排任何工作的時候,尤其在使用AlarmManager的時候。假如你的應用程序使用了JobScheduler,Firebase JobDispatcher或者同步適配器,則會自動使用指數退避。

原文地址:https://developer.android.google.cn/topic/performance/scheduling.html

智能作業調度