使用無線無線電傳輸資料可能是應用程式最重要的電池消耗來源之一。為了盡量減少與網路活動相關的電池耗電情況,請務必瞭解連線模型對基礎無線電硬體的影響。
本節將介紹無線電狀態機制,並說明應用程式的連線模式如何與之互動。接著提供幾種技巧,只要遵循這些技巧,就能盡可能減少應用程式對電池的資料消耗量。
無線電狀態機器
使用者裝置上的無線無線電功能內建省電功能,可將耗電量降到最低。在完全運作時,無線電會耗用大量電力,但在閒置或待機時,電力消耗量就會降到最低。
請注意,無線電無法從待機狀態立即切換為完全運作狀態。與「開啟」無線電相關的延遲時間。因此,電池會從較高能量狀態緩慢轉換至較低能量狀態,以便在未使用時節省電力,同時盡量減少與「開啟」無線電相關的延遲時間。
一般 3G 網路無線電的狀態機器包含三種能源狀態:
- 全速:在連線處於活動狀態時使用,可讓裝置以最高傳輸速率傳輸資料。
- 低耗電:這是一種中間狀態,可將電池耗電量降低約 50%。
- 待命:在沒有網路連線的情況下,耗電最小狀態。
雖然低電量和待機狀態會耗用較少電量,但也會導致網路要求出現明顯的延遲。從低電量狀態恢復到全電量狀態大約需要 1.5 秒,從待機狀態恢復到全電量狀態則可能需要超過 2 秒。
為盡量減少延遲時間,狀態機制會使用延遲時間,將轉換延後至較低的省電狀態。圖 1 使用 AT&T 的一般 3G 無線電播放時間。
每部裝置的無線電狀態機器,尤其是相關聯的轉換延遲時間 (稱為「尾端時間」) 和啟動延遲時間,會因所採用的無線電技術 (3G、LTE、5G 等) 而異,並由裝置運作的電信業者網路定義及設定。
本頁說明一般 3G 無線無線電的代表狀態機器,以 AT&T 提供的資料為基礎。不過,一般原則和相關最佳做法適用於所有無線電實作。
這種方法對於一般的行動網路瀏覽來說特別有效,因為這可避免使用者瀏覽網頁時出現不必要的延遲。相對較短的尾端時間也能確保瀏覽工作階段結束後,無線電可以轉移至較低的耗電狀態。
不過,在 Android 等現代智慧型手機作業系統上,這種做法可能會導致應用程式效率不彰,因為應用程式會同時在前景 (延遲時間很重要) 和背景 (應優先考量電池續航力) 執行。
應用程式對無線電狀態機制的影響
每次建立新的網路連線時,無線電就會切換為完整電源狀態。以先前所述的典型 3G 無線電狀態機器為例,在傳輸期間,無線電會維持全功率,再加上額外的 5 秒尾端時間,然後進入 12 秒的低耗電狀態。因此,對於一般 3G 裝置而言,每個資料傳輸工作階段都會導致無線電耗電至少 18 秒。
實務上,這表示如果應用程式每分鐘進行一次資料傳輸三次,每分鐘三次就會保持無線無線電的持續運作狀態,如同進入待機模式,切換回高功率。
相較之下,如果同一個應用程式將資料傳輸作業綁定在一起,每分鐘執行一次三秒的傳輸作業,則無線電會維持在高耗電狀態,總共只會維持 20 秒。這樣一來,無線電就能每分鐘待命 40 秒,大幅降低電池消耗量。
最佳化技巧
瞭解網路存取對電池續航力的影響後,接下來我們將說明幾個可減少電池耗電量,同時提供快速流暢使用者體驗的做法。
套裝組合資料移轉
如上一節所述,合併資料移轉作業,降低轉移資料的頻率,是提高電池效率的最佳方法之一。
當然,如果應用程式需要立即接收或傳送資料來回應使用者動作,這可能不是每次都會發生。您可以透過預測和預先載入資料來緩解這種情況。其他情境 (例如將記錄檔或分析資料傳送至伺服器) 及其他非緊急的應用程式啟動資料移轉作業,非常適合用於批次處理和統合作業。如要瞭解排定背景網路傳輸的訣竅,請參閱「最佳化應用程式啟動的任務」。
預先擷取資料
如要減少應用程式執行的獨立資料移轉工作階段數量,預先擷取資料是另一種有效的方式。透過預先擷取功能,當使用者在應用程式中執行某個動作時,應用程式會預測下一個使用者動作最有可能需要哪些資料,然後透過單一連線以完整容量,透過單一爆發來擷取該資料。
透過預先載入轉移作業,您可以減少下載資料所需的無線電啟動次數。如此一來,您不僅能延長電池續航力,還能縮短延遲時間、降低所需頻寬,並縮短下載時間。
預先擷取功能還可縮短應用程式內的延遲時間,因為在執行動作或查看資料前,系統必須等待下載作業完成,而預先擷取功能可避免這類延遲。
以下提供實務範例。
新聞閱讀器
許多新聞應用程式會嘗試減少頻寬,方法是只在使用者選取類別、想閱讀完整文章,以及捲動至縮圖時,才下載標題、完整文章和縮圖。
使用這個方法時,大多數使用者在新聞閱讀工作階段中捲動標題、變更類別以及閱讀文章時,無線電都會強制啟用。不僅如此,在能量狀態之間不斷切換,也會導致切換類別或閱讀文章時出現明顯的延遲。
更好的做法是先從第一組新聞標題和縮圖開始預先擷取適量的資料,以便縮短啟動時間,接著繼續使用其餘的標題和縮圖,以及至少從主要標題清單中取得的各篇文章文字。
另一個替代方案是預先擷取每個標題、縮圖、文章文字,甚至是全文文章圖片 (通常是在預定時間表的背景中)。這種做法可能會耗費大量頻寬和電池續航力,用於下載從未使用的內容,因此應謹慎實施。
其他注意事項
雖然預先載入資料有許多好處,但如果過度使用,也會帶來風險,因為系統會下載未使用的資料,導致電池耗電量和頻寬用量增加,以及下載配額增加。另外,請務必確保預先載入不會在應用程式等待預先載入完成時延遲應用程式啟動。就實際層面而言,這可能意味著逐步處理資料,或啟動連續移轉作業,以使系統必須先下載及處理應用程式啟動所需的資料。
預先擷取資料的積極程度取決於要下載的資料大小,以及資料被使用的可能性。根據前述狀態機器的粗略指南,如果資料在目前使用者工作階段內的使用機率為 50%,您通常可以先預先載入約 6 秒 (約 1-2 MB) 的資料,然後再下載未使用的資料,這樣一來,您就能在開始下載資料前,先省下不下載資料的潛在成本。
一般來說,預先擷取資料是理想做法,這樣您只需每 2 到 5 分鐘就啟動一次下載作業,且下載量約為 1 到 5 MB。
依據這項原則,下載大型檔案 (例如影片檔案) 時,應以規律的間隔 (每 2 到 5 分鐘) 分段下載,有效地預先載入可能在接下來幾分鐘內觀看的影片資料。
解決方法之一是,只在連上 Wi-Fi 時 (或許還要加上裝置充電時) 安排完整下載作業。WorkManager API 正是支援這種用途,可讓您限制背景工作,直到裝置符合開發人員指定的條件為止,例如充電和連上 Wi-Fi。
請先檢查連線狀態,再提出要求
搜尋行動訊號是行動裝置上耗電量最高的作業之一。針對使用者發起的要求,最佳做法是先使用 ConnectivityManager
檢查連線狀態,如監控連線狀態和連線計量功能所示。如果沒有網路連線,應用程式可能會禁止搜尋行動無線電來節省電力。然後,您可以在建立連線時以批次方式安排要求,並搭配其他要求執行。
集區連線
除了批次處理和預先擷取之外,另一個有助於改善網路效能的策略,就是將應用程式的網路連線集中起來。
重複使用現有網路連線通常比啟動新的網路連線更有效率。重複使用連線還可讓網路更聰明地回應壅塞和相關網路資料問題。
HttpURLConnection
和大多數 HTTP 用戶端 (例如 OkHttp) 預設會啟用連線集區,並重複使用相同連線來處理多個要求。
回顧與展望
在本節中,您瞭解了許多無線電台相關資訊,以及一些可廣泛套用的策略,藉此提供快速、即時的使用者體驗,同時減少電池耗電量。
在下一節中,我們將詳細探討大多數應用程式常見的三種不同類型的網路互動。您將瞭解每種類型的驅動因素,以及能有效管理這些互動的新式技術和 API。