1. 程式人生 > >Android開發——JobScheduler機制以及Android電量優化

Android開發——JobScheduler機制以及Android電量優化

0. 前言

Android Lollipop版本中增加了JobScheduler APIJobScheduler翻譯為任務排程器,可以替代WakeLodkAlarm執行任務。那麼它們的區別在哪呢?JobScheduler又有什麼特別之處呢?本文原創,轉載請註明出處為SEU_Calvin的部落格

1.  JobScheduler的省電功能

使用JobScheduler替代WakeLockAlarm執行任務,是因為後者在每個APP中是相互獨立的,而JobScheduler執行在作業系統層面

舉個例子,如果10APP每小時喚醒裝置一次,由於這些任務的執行時機不可能同步,因此使用WakeLockAlarm

一個小時內裝置被喚醒了10!但由於JobScheduler是作業系統層面的,因此係統會執行裝置喚醒的排程工作,每小時裝置的喚醒次數會顯著減少。

可能有朋友會問了,那使用JobScheduler每小時裝置被喚醒次數被降低到多少次呢?這個還真說不準,為什麼說不準。是因為JobScheduler允許設定獲取資料的時間間隔,比如把喚醒時間限制在8min10min之前,這就給作業系統留出了一定的調整範圍,使系統更好地協調裝置喚醒任務,會達到一定的省電效果

2014Google開發大會上指出,如果每個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的具體使用等可以參考這篇文章

4.  Android電量優化的其他建議

(1)延遲非必須的操作到充電狀態時,比如可以在夜間充電時完成APP的更新。

(2)當不需要感測器採集資料時,要取消註冊。

(3)合理使用定位功能,減少位置更新頻率,或者根據實際情況使用不同精度的定位需求。