最佳化工作排程 API 的電池用量

本頁會提供一些最佳做法,協助您設定運作良好的背景工作。這些最佳做法專門用於降低電池耗電量,但也能透過其他方式提升裝置效能,例如減少網路用量。

選擇最佳限制條件並合併工作

為了盡可能減少裝置上工作的負載,請務必指定最佳限制。(針對 JobScheduler 工作,請參閱 JobInfo.Builder 瞭解限制清單。)舉例來說,如果您想確保應用程式不會耗盡電池電量,不妨指定 RequiresCharging 限制。此限制會指示系統不要執行工作,除非電池水平實際增加。同樣地,使用 Wi-Fi 所需的電力通常比行動數據網路低,所以如果您的工作需要網路連線,但可以等待使用非計量付費的網路,建議您設定 NetworkType.UNMETERED 限制。

此外,如果您有多項類似工作,且這些工作都屬於相同的限制,我們通常會建議您將這些工作合併為單一工作,讓裝置僅喚醒一次。舉例來說,假設應用程式有三個不同的資料集,需要同步處理至雲端儲存空間。您通常更好的做法是只安排一項「同步處理資料」工作、定義適當的限制條件,並讓該工作在執行時,處理所有待處理的資料同步處理作業,而不要為每個資料集分別安排三個不同的工作。

即便如此,請勿嘗試將「無關的」工作合併成單一的全面性工作,而是務必為每項工作提供合適的限制。舉例來說,如果工作的優先順序較低,請務必指定在裝置處於閒置和充電狀態時執行這些工作。如此一來,即使裝置多次喚醒,也不會影響使用者體驗或電池續航力。

請只將具有時效性的工作標示為加速

如果某項工作特別緊急,則可將工作標示為加速。(針對 JobScheduler 工作,請呼叫 JobInfo.Builder.setExpedited(true))。以多種方式排定工作的優先順序。例如,系統會盡可能立即執行這些工作,而電源管理限制較不可能影響加速工作。

因此,您「只」在需要時將工作標示為加速。由於加速工作可能會覆寫某些系統的效率,因此急件工作如果未標示該方法,可能耗用更多電力。

建議您只有在工作具有時效性時,才將工作標示為加速,如果工作執行時間較長,使用者體驗就會受到影響。舉例來說,如果應用程式會執行一項工作來處理高優先順序的 FCM 訊息,則適合將工作標示為加速。但請勿將工作標示為加速,藉此覆寫系統最佳化項目。

查看工作停止的原因

如果工作在工作完成前停止,您可以呼叫 WorkInfo.getStopReason() 來查看工作停止的原因。(針對 JobScheduler 工作,請呼叫 JobParameters.getStopReason()。基於下列原因,請務必執行此操作。首先,您會想要完成工作。找出工作停止的原因有助於避免類似情況。不過,系統也可能會因為行為過度使用系統資源,而停止工作。您不希望應用程式成為品質不佳的公民,這指的是不必要的電池或網路。

舉例來說,如果工作經常因為 STOP_REASON_TIMEOUT 原因而停止,有時可能會因為極端情況,導致工作花費的時間超出預期。

建議您使用分析引擎追蹤應用程式工作是否停止,以及工作停止的原因。