0. 前言
在Android Lollipop版本中增加了JobScheduler API,JobScheduler翻譯為任務調度器,可以替代WakeLodk和Alarm運行任務。那么它們的區別在哪呢?JobScheduler又有什么特別之處呢?本文原創,轉載請注明出處為SEU_Calvin的博客。
1. JobScheduler的省電功能
之所以說JobScheduler可以替代WakeLodk和Alarm運行任務,是因為后者在每個APP中是相互獨立的,而JobScheduler運行在操作系統層面。舉個例子,如果10個APP每半小時喚醒設備一次,由於這些任務的執行時機不可能同步,因此使用WakeLodk和Alarm一個小時內設備被喚醒了20次!但由於JobScheduler是操作系統層面的,因此系統會更有效地執行所有調度工作,每小時設備的喚醒次數會顯著減少。
可能有朋友會問了,那使用JobScheduler每小時設備被喚醒次數被降低到多少次呢?這個還真說不准,為什么說不准。是因為JobScheduler允許設定獲取數據的時間間隔,比如把喚醒時間限制在8min后10min之前,這就給操作系統留出了一定的調整范圍,使系統更好地協調設備喚醒任務,會達到一定的省電效果。2014年Google開發大會上指出,如果每個APP都使用這個API,那么可以節約15%到20%的電量。
2. JobScheduler擁有更多的觸發選項
JobScheduler比AlarmManager有更多的觸發選項,后者只有一個定時功能。
//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的具體使用等可以參考這篇文章。