網路流量工具已遭淘汰。如果您的 Android Studio 為 3.0 以上版本,建議使用網路分析器檢視應用程式透過網路傳輸資料的方式和時機。
在上一節中,您已執行測試、收集資料,並使用流量 ID 標記應用程式程式碼。本課程會說明如何查看您收集到的網路流量資料,並引導您採取措施來改善應用程式的網路效能,進而減少耗電量。
分析應用程式網路流量
如果網路硬體長時間皆未使用,代表應用程式使用網路資源的效率較高。以行動裝置來說,不論是透過啟動無線電來收發資料,還是長時間開啟行動裝置無線電,相關費用通常都很可觀。如果應用程式可以有效率地存取網路,您應該會發現其在網路中的通訊內容會加入群組,而且與應用程式發出任何連線要求之間的間隔時間差不多。
圖 1 顯示來自應用程式的網路流量並不理想,這是網路流量工具測得的結果。我們可以看到該應用程式經常發出網路要求,而此流量幾乎沒有待用時間可讓無線電切換至低功耗的待機模式。此應用程式的網路存取行為可能會使無線電長時間保持開啟,而這樣會耗電。
圖 2 所示為最佳網路流量模式。應用程式會在爆發期傳送網路要求,中間穿插長時間無流量的間隔,讓無線電可以切換為待機模式。此圖表顯示的工作數量與圖 1 相同,但要求經過移動並分組,所以無線電在大部分時間都處於待命狀態。
如果應用程式的網路流量看起來與圖 2 中的圖表相似,那就表示情況不錯,恭喜!建議您查看本文所述的技巧,瞭解如何將一般的網路用量最佳化,進一步提高網路效率。
如果應用程式的網路流量看起來比較像圖 1 中的圖表,您應更謹慎地審視應用程式存取網路的方式。首先,請分析應用程式產生的網路流量類型。
分析網路流量類型
查看應用程式產生的網路流量時,您需先瞭解流量來源,才能據此進行最佳化。如果應用程式確實會回應使用者的操作,那麼其所產生的頻繁網路活動可能就完全不是問題;但如果應用程式不在前景之中,或使用者只是將裝置放在口袋或皮包中,這樣就完全不適合。本節將說明如何分析應用程式產生的網路流量類型,並引導您採取相關措施以提升效能。
在上一節課程中,您已根據不同流量類型標記應用程式的程式碼,並使用網路流量工具收集應用程式資料,同時產生一份活動圖表 (如圖 3 所示)。
網路流量工具會根據您在上一節課程中建立的標記為流量配色。這些顏色會以您在應用程式程式碼中定義的流量類型常數為基準。因此請回頭看看應用程式的程式碼,確認哪三個常數分別代表使用者、應用程式或伺服器導致的流量。
以下各節將說明如何查看網路流量類型,並提供有關流量最佳化的建議。
分析使用者導致的網路流量
使用者啟動網路活動時,如果使用者正在使用您的應用程式執行某個特定活動,就可以可有效地將網路活動歸納分組;如果使用者要求應用程式必須取得的額外資訊,網路活動就會不平均分散。之所以要分析使用者導致的網路流量,目的是找出長期頻繁使用網路的模式,並嘗試建立或延長不用存取網路的時段。
由於使用者要求難以預測,要在應用程式中最佳化這類網路使用行為並不容易。此外,使用者的期望是使用應用程式時能快速獲得回應,所以如果您為了提高效率而延後處理要求,可能會導致使用者體驗不佳。一般來說,當使用者與應用程式直接互動時,您應先快速回應使用者需求,第二順位才是提高網路使用效率。
以下是針對使用者導致的網路流量進行最佳化的幾種方法:
- 預先擷取網路資料 - 當使用者在應用程式中執行某個操作時,應用程式會預期下一個動作可能需要哪些資料,然後大量擷取該資料並保持連線狀態,直到使用者提出要求為止。
- 檢查連線狀態或監聽變更 - 在執行更新前,請先檢查網路連線或監聽連線變更。
- 減少連線次數 - 使用能夠成組下載資料的伺服器 API。
分析應用程式導致的網路流量
應用程式程式碼啟動的網路活動通常是一個區域,您在此區域中的設定可能會對網路頻寬的效益造成重大影響。在分析應用程式的網路活動時,請尋找無活動的時段,然後判斷這些時段是否可以增加。如果您發現應用程式存取網路時的模式一致,請設法在不同次的存取操作間安插時間間隔,讓裝置無線電能夠切換為低耗電模式。
以下是針對應用程式導致的網路流量進行最佳化的幾種方法:
批次處理網路要求並排定時程 - 延後應用程式的網路要求,在對電池續航力有利的時候一併處理。
允許系統檢查連線能力 - 如果可以讓系統在應用程式進入休眠時執行檢查,就可以省掉執行應用程式的電池成本,而只是檢查網路連線。
分析伺服器導致的網路流量
伺服器與應用程式通訊而啟動的網路服務,通常也是可以大幅影響網路頻寬使用效益的區域。當您分析伺服器連線的網路活動時,請尋找無活動的時段,並判斷這些時段是否可以增加。如果您發現伺服器網路活動的模式一致,請設法在不同活動間的位置移動,讓裝置無線電能夠切換為低耗電模式。
以下是針對伺服器導致的網路流量進行最佳化的方法:
- 使用 FCM 進行伺服器更新 - 請考慮使用 Firebase 雲端通訊服務進行伺服器端更新,而不是輪詢。