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

使用無線無線電傳輸資料可能是應用程式最重要的電池消耗來源之一。為了盡量減少與網路活動相關的電池耗電情況,請務必瞭解連線模型對基礎無線電硬體的影響。

本節介紹無線無線電狀態機器,並說明應用程式連線模型如何與無線無線電狀態機器互動。接著,系統會提供多項技巧,盡可能減少應用程式資料消耗行為對電池造成的影響。

無線電狀態機器

使用者裝置上的無線無線電功能內建省電功能,可將耗電量降到最低。在系統完全運作的情況下,無線無線電會消耗大量電力,但閒置或待機模式時,無線電會消耗極少的電力。

其中一個重要因素是,無線電無法立即從待機模式移動至完全活動狀態。「啟動」無線電有一段延遲時間。因此,電池會從較高的能源狀態轉換到較低的能源狀態,藉此在不使用時節省電力,同時嘗試盡量減少「啟動」無線電的相關延遲時間。

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

  • 充飽電:在連線處於啟用狀態時使用,允許裝置以最高速率傳輸資料。
  • 低耗電:此中繼狀態,可減少約 50% 的電池耗電量。
  • 待命:在沒有網路連線的情況下,耗電最小狀態。

雖然低待命狀態和待命狀態會消耗大量電量,但網路要求也會大幅延遲。從低狀態恢復充飽電需要約 1.5 秒的時間,而從待機模式移動到滿滿可能需要 2 秒。

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


圖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。