Android開發——JobScheduler機制


0. 前言

Android Lollipop版本中增加了JobScheduler APIJobScheduler翻譯為任務調度器,可以替代WakeLodkAlarm運行任務。那么它們的區別在哪呢?JobScheduler又有什么特別之處呢?本文原創,轉載請注明出處為SEU_Calvin的博客

 

1.  JobScheduler的省電功能

之所以說JobScheduler可以替代WakeLodkAlarm運行任務,是因為后者在每個APP中是相互獨立的,而JobScheduler運行在操作系統層面。舉個例子,如果10APP每半小時喚醒設備一次,由於這些任務的執行時機不可能同步,因此使用WakeLodkAlarm一個小時內設備被喚醒了20!但由於JobScheduler是操作系統層面的,因此系統會更有效地執行所有調度工作,每小時設備的喚醒次數會顯著減少。

可能有朋友會問了,那使用JobScheduler每小時設備被喚醒次數被降低到多少次呢?這個還真說不准,為什么說不准。是因為JobScheduler允許設定獲取數據的時間間隔,比如把喚醒時間限制在8min10min之前,這就給操作系統留出了一定的調整范圍,使系統更好地協調設備喚醒任務,會達到一定的省電效果2014Google開發大會上指出,如果每個APP都使用這個API,那么可以節約15%20%的電量。

 

2.  JobScheduler擁有更多的觸發選項

JobSchedulerAlarmManager有更多的觸發選項,后者只有一個定時功能。

//Use the android.app.job.JobInfo.Builder toconfigure how the scheduled task should run.
//You can schedule the task to run underspecific conditions, such as:
//1.The device is charging
//2.The device is connected to an unmeterednetwork
//3.The system deems the device to be idle
//4.Completion with a minimum delay or within aspecific deadline
這四個例子包括 充電狀態、 Wifi 狀態、設備空閑以及延長失敗鏈接后重連的間隔時間 JobScheduler 包下了這些狀態的檢測。有助於開發者 configure how the scheduled task should run

 

3.  JobScheduler的一些補充

JobScheduler一個值得一提的是執行重復工作的能力,上面的狀態4也提到了,這里的重復工作執行周期可以是線性的,也可以是指數性衰減的,即JobScheduler有兩種延時工作的衰減方式,即線性衰減指數衰減

因為當我們的APP不處於前台時,可能並不需要這種頻繁的數據更新,當然你依舊頻繁的數據更新也沒有讓用戶把耗電的罪名怪到你頭上,因此為了Android生態的更加美好,我還是建議你如果看到了這篇文章,請盡可能的優化好你的APP

關於JobScheduler的具體使用等可以參考這篇文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM