針對網路存取權進行最佳化

使用無線無線電傳輸資料可能是應用程式最大的電池耗電來源之一。如要盡可能降低與網路活動相關的電池耗電,請務必瞭解連線模型對基礎無線電硬體的影響。

本節將介紹無線無線電狀態機器,並說明應用程式的連線模型如何與其互動。接著,此方法會提供多項技術,協助您盡量減少應用程式數據用量的電池用量。

無線電狀態機器

使用者裝置上的無線無線電內建省電功能,可盡量減少消耗的電池電量。完全啟用時,無線無線電會耗用大量電力,但在閒置或待機時,廣播會耗用極少的電力。

其中一個重要因素是,無線電無法立即從待機狀態切換到完全啟用中。「啟動」無線電有延遲期間。因此,電池會從較高的能源狀態轉換到降低能源狀態,以便在不使用時節省電力,同時嘗試縮短無線電啟動相關作業的延遲時間。

一般 3G 網路無線電的狀態機器包含三種能源狀態:

  • 完整電力:可在連線啟用時使用,讓裝置以最高速率傳輸資料。
  • 低功耗:這種中間狀態會節省約 50% 的電池耗電量。
  • 待命:沒有網路連線的情況下的最低耗電量狀態。

雖然低待機狀態和待命狀態會大幅降低電量,但也會對網路要求造成嚴重延遲。從低狀態返回電源需要約 1.5 秒,從待機模式改為充飽電可能需要超過 2 秒。

為了盡可能縮短延遲時間,狀態機器會延遲轉換到較低的能源狀態。圖 1 針對一般 3G 無線電使用 AT&T 的時間碼。


圖1. 一般的 3G 無線無線電狀態機。

每部裝置的無線電狀態機器 (尤其是相關的轉換延遲時間 (「尾時間」) 和啟動延遲時間) 會因採用的無線無線電技術 (3G、LTE、5G 等) 而異,並且由裝置運作的電信業者網路定義及設定。

此頁面說明一般 3G 無線無線電的代表狀態機器,以 AT&T 提供的資料為基礎。不過,所有無線無線電實作都能遵循一般原則和所產生的最佳做法。

這種做法在一般的行動網路瀏覽時特別有效,因為可以防止使用者在瀏覽網路時出現惡意延遲。相對較低的尾部時間也可確保在瀏覽工作階段結束後,無線電可能會移至較低的能源狀態。

不過,這種做法可能導致在 Android 等新型智慧型手機作業系統上,執行效率不彰的應用程式,其中應用程式會在前景和背景執行 (其中延遲時間很重要) 和背景作業 (應優先考慮電池續航力)。

應用程式對無線電狀態機器的影響

每次建立新的網路連線時,無線電都會轉換為完整電源狀態。如前文所述,一般的 3G 無線電狀態機器在轉移期間將保持完全電力,加上 5 秒鐘的尾巴,接著在低耗電狀態時再充電 12 秒。因此,對於一般 3G 裝置,每個資料移轉工作階段都會產生無線電至少 18 秒的能量。

實際上,這表示應用程式進行一秒的資料傳輸 (每分鐘三次) 將保持無線無線電隨時保持啟用狀態,並像進入待機模式一樣,將其移回高功率。


圖2. 相對無線無線電電源使用情況,每分鐘傳輸三次,且每分鐘執行三次。此圖排除了每次執行作業之間的「驅動」延遲時間。

相較之下,如果同一個應用程式整合了資料移轉,每分鐘執行一次三秒傳輸,這會將無線電保持在高功率狀態,每分鐘總計只有 20 秒。這樣一來,無線電會每分鐘處於待機狀態 40 秒,進而大幅降低電池耗電量。


圖3.相對無線無線電電源用量,每分鐘執行一次三秒轉乘。

最佳化技巧

現在您已瞭解網路存取對電池續航力的影響,接著我們來談談可以降低電池耗電與提供快速流暢使用者體驗的一些做法。

套裝組合資料移轉

如上一節所述,如要提高電池效率,最佳做法是合併資料移轉,使傳送更多資料的頻率降低。

當然,如果應用程式需要根據使用者動作立即接收或傳送資料,則不一定能這麼做。您可以藉由預測及預先擷取資料的方式減緩這種情況。其他情況下,例如將記錄或分析結果傳送至伺服器,以及其他非緊急、由應用程式啟動的資料移轉,都非常適合進行批次處理與組合作業。如需排定背景網路移轉作業的提示,請參閱最佳化應用程式啟動的工作

預先擷取資料

預先擷取資料是減少應用程式執行的獨立資料移轉工作階段數的另一個有效方法。透過預先擷取功能,當使用者在應用程式內執行某項操作時,應用程式會預測下一系列使用者動作最可能需要哪些資料,然後在單一連線中透過單一連線擷取該資料,以便完整發揮容量。

透過優先載入移轉作業,可以減少下載資料所需的無線電啟動次數。因此,您不僅可節省電池續航力,也改善延遲、降低所需頻寬及縮短下載時間。

預先擷取功能也可盡量減少在執行動作或查看資料前等待下載作業完成的應用程式內延遲時間,提供更優質的使用者體驗。

以下提供一個具體範例。

新聞閱讀器

許多新聞應用程式會嘗試在使用者選取類別後下載廣告標題、只在使用者想要閱讀時提供完整文章和縮圖,以便減少頻寬。

使用這個方法時,大多數使用者的新聞閱讀工作階段在捲動標題、變更類別及閱讀文章時,強制保持啟用狀態。不僅如此,持續切換能源狀態的做法也會在切換類別或閱讀文章時造成嚴重的延遲。

更好的做法是在啟動時預先擷取合理的資料量 (從第一組新聞標題和縮圖開始,確保啟動時間較短),然後繼續保留其餘的廣告標題和縮圖,以及從主要標題清單中取得的每篇報導文章文字。

另一個替代做法則是預先擷取每個標題、縮圖、文章文字,甚至完整的文章圖片 (通常是按照預先決定的時間表在背景進行預先擷取)。這個方法可能會耗用大量頻寬和電池電力,下載從未使用過的內容,因此導入時請務必謹慎。

其他注意事項

雖然預先擷取資料能帶來許多好處,但過於密集預先擷取,也會因為下載未使用的資料,而增加電池耗電和頻寬使用量,以及下載配額。此外,確保預先擷取不會在應用程式等待預先擷取完成時延遲啟動應用程式。在實際術語中,這可能表示逐步處理資料,或是啟動連續移轉作業,優先下載及處理應用程式啟動所需的資料。

預先擷取資料的積極程度取決於下載資料的大小和使用的可能性。總而言之,以先前所述的狀態機器為基礎,如果資料在目前使用者工作階段內使用率為 50%,通常可以先預先擷取約 6 秒 (約 1 至 2 MB),再開始下載未使用的資料,到可能節省下載這些資料可能節省的費用。

一般來說,建議您預先擷取資料,這樣您只需要每 2 到 5 分鐘重新執行一次下載作業,並以 1 至 5 MB 的順序重新下載。

根據這個原則,大型下載內容 (如影片檔案) 應定期 (每 2 到 5 分鐘) 分段下載,有效預先擷取可能在接下來的幾分鐘內可能查看的影片資料。

其中一種解決方法是安排只在連上 Wi-Fi 時才執行完整下載作業,且可能只會在裝置充電時執行。WorkManager API 確切支援這個用途,可讓您將背景工作限制在裝置符合開發人員指定的條件為止,例如充電及連上 Wi-Fi。

提出請求之前,請先檢查連線

對行動裝置來說,搜尋細胞訊號是最耗電的作業之一。使用者啟動的要求最佳做法是先使用 ConnectivityManager 檢查連線,如監控連線狀態和連線計量功能所示。如果沒有網路,應用程式會不會強制要求行動電台進行搜尋,藉此節省電力。接著,系統可在建立連線時,為要求排程,並與其他要求一起批次執行。

集區連線

除了批次和預先擷取之外,還有一項策略是集區應用程式的網路連線。

相較於啟動新連線,重複使用現有的網路連線通常較有效率。重複使用連線也可讓網路更靈活地回應壅塞和相關網路資料問題。

HttpURLConnection 和大部分的 HTTP 用戶端 (例如 OkHttp) 會預設啟用連線集區,並在多個要求中重複使用相同的連線。

回顧及預做準備

在本節中,您已充分瞭解無線無線電,並介紹一些可廣泛應用的策略,以便在降低電池耗電量的同時提供快速流暢的使用者體驗。

在下一節中,我們將詳細介紹大多數應用程式常見的三種網路互動類型。您將瞭解每種類型的驅動程式,以及用於有效管理這些互動的新技術和 API。