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

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

本節將介紹無線無線電狀態機器,並說明應用程式連線模型與之互動的方式。接著提供多種技術,只要遵循這些技巧,就能盡量降低應用程式數據用量的影響。

無線電狀態機器

使用者裝置上的無線無線電內建省電功能,可將耗電量降到最低。無線無線電會耗用大量電力,但如果處於閒置或待機狀態,無線電耗電量極低。

還有一項重要因素是,無線電無法立即從待機模式切換為完全使用。「啟動」無線電會有一段延遲,因此,電池會從高耗電狀態轉換至低耗電量狀態,藉此在不使用時節省電力,同時嘗試盡量縮短無線電「開機」作業的相關延遲時間。

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

  • 充飽電:在連線狀態下使用,讓裝置能以最高速率傳輸資料。
  • 低耗電:一種能減少電池耗電量約 50% 的中間狀態。
  • 待命:沒有啟用網路連線時的耗電量最低狀態。

雖然低和待命狀態的耗電量會大幅減少,但也會大幅延遲網路要求。從低狀態回復到完全電源需要約 1.5 秒,從待機切換為充飽電可能需要 2 秒以上的時間。

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


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

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

本頁說明根據 AT&T 提供的資料,一般 3G 無線無線電的代表狀態機器。不過,一般原則和最佳做法適用於所有無線無線電實作。

這個方法對於一般行動網路瀏覽來說特別有效,因為這種做法可避免使用者在瀏覽網頁時產生不必要的延遲。相對低的尾時也可確保瀏覽工作階段完成後,無線電可以切換至較低的能源狀態。

遺憾的是,這種做法可能會導致應用程式在 Android 等新型智慧型手機作業系統上效率低落,也就是應用程式在前景同時執行 (延遲時間很重要) 和背景 (應優先處理電池續航力)。

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

每次建立新的網路連線時,無線電都會轉換為完整電源狀態。若是先前所述的一般 3G 無線電狀態機器,在傳輸期間,它會保持完全耗電,並加上 5 秒尾時間,接著在低耗電狀態下 12 秒。因此,對於一般 3G 裝置,每個資料移轉工作階段都會造成無線電訊號至少 18 秒。

實際上,這表示應用程式執行 1 秒資料傳輸 1 秒 (每分鐘 3 次) 時,無線無線電會一直保持啟用,就像進入待機模式時一樣回到高功率。


圖2. 相對無線無線電功率,每分鐘會執行 3 次傳輸作業。圖不包含每次執行作業之間的「開機」延遲時間。

相較之下,如果同一個應用程式傳輸資料時,每分鐘執行一次 3 秒傳輸作業,則這會讓無線電在高功率狀態中保持每分鐘總和為 20 秒。這可讓無線電處於待機狀態,每分鐘 40 秒,進而大幅降低電池耗電量。


圖3.相對無線無線電功率,每分鐘執行一次三次傳輸作業。

最佳化技巧

現在,您已瞭解網路存取對電池續航力的影響,接著來談談幾個有助於降低電池耗電量及提供快速流暢使用者體驗的做法。

套裝組合資料移轉

如上一節所述,如要提高電池效能,最好的做法是整合資料移轉,降低轉移更多資料的頻率。

當然,如果應用程式需要立即接收或傳送資料回應使用者動作,則不一定可行。您可以藉由預測及預先擷取資料來減緩這種情況。其他情境,例如將記錄檔或分析傳送至伺服器,以及其他非緊急的應用程式啟動資料移轉作業,也非常適合用於批次處理和套裝組合。如需排定背景網路移轉作業的時間,請參閱最佳化應用程式啟動的工作一文。

預先擷取資料

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

透過優先載入傳輸內容,您可以減少下載資料所需的無線電啟用次數。因此,您不僅可節省電池用量,還要改善延遲時間、減少所需頻寬,並縮短下載時間。

此外,預先擷取功能也可藉由先等待下載作業完成之後,才執行動作或查看資料,進而降低應用程式內的延遲時間,進而改善使用者體驗。

以下提供一個實際範例

新聞閱讀器

許多新聞應用程式會嘗試在選取類別後下載標題來降低頻寬用量,並且只在使用者想閱讀完整文章時才顯示完整文章,而且使用者捲動畫面時會看到縮圖。

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

更好的方法是在啟動時預先擷取合理數量的資料,從第一組新聞標題和縮圖著手,確保低延遲啟動時間,然後繼續處理其餘的標題和縮圖,以及至少從主要標題清單提供的每篇報導的文字內容。

另一個替代方法是預先擷取每個廣告標題、縮圖、文章文字,甚至是文章全文 (通常是按照預定的時間表在背景中)。這種方法可能會花費大量頻寬和電池續航力,導致下載未使用的內容,因此導入時請謹慎小心。

其他注意事項

預先擷取的資料可帶來許多好處,但過於積極預先擷取也會下載未使用的資料,造成電池耗電和頻寬用量增加,以及下載配額。您也必須確保在應用程式等待預先擷取完成時,預先擷取不會延遲應用程式啟動。在實用術語中,可能是指逐步處理資料,或是優先進行連續移轉作業,以先下載和處理應用程式啟動所需的資料。

預先擷取資料的速度取決於下載的資料量,以及使用資料的可能性。以先前說明的狀態機器為依據,以目前使用者工作階段的機率而言,您通常可以預先擷取約 6 秒 (約 1 至 2 MB) 的概略指南。

一般來說,建議您預先擷取資料,如此一來,您只需要每 2 到 5 分鐘重新開始一次下載,再以 1 至 5 MB 的順序進行下載即可。

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

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

先檢查連線能力再提出要求

在行動裝置上,搜尋基地台訊號是最耗電的作業之一。使用者啟動要求的最佳做法,是先使用 ConnectivityManager 檢查連線,如監控連線狀態和連線計量功能所示。沒有網路時,應用程式可以不強製手機無線電搜尋,藉此節省電力。然後在建立連線時,即可安排要求並與其他要求分批執行。

集區連線

除了批次和預先擷取之外,還有一項有助於建立批次及預先擷取應用程式的策略,那就是建立應用程式的網路連線。

重複使用現有的網路連線,通常比啟動新的連線更有效率。此外,藉由重複使用連線,網路也能更明智地回應壅塞和相關網路資料問題。

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

回顧並預先做好準備

在本節中,您已瞭解許多無線無線電,以及一些可以廣泛套用的策略,以便在降低電池耗電量的同時,提供快速且回應的使用者體驗。

下一節將詳細說明多數應用程式常見的三種網路互動類型。您將瞭解這些類型的驅動程式,並介紹能有效管理這些互動的新型技術和 API。