數十億使用者之間的連線能力

全球有超過一半的使用者會透過 2G 連線體驗您的應用程式。如要改善使用者體驗,您可以儲存資料、將要求排入佇列及處理圖片,以達到最佳效能。

本文將提供一些訣竅,協助您完成這些事項。

最佳化圖片

您可以透過多種方式讓圖片更容易下載。包括提供 WebP 圖片、動態調整圖片大小,以及使用圖片載入程式庫。

提供 WebP 圖片

  • 透過網路提供 WebP 檔案,以縮短圖片載入時間並節省網路頻寬。WebP 檔案的大小通常小於 PNG 和 JPG 圖片,且圖片品質至少相同。即使使用有損的設定,WebP 仍能產生與原始圖片幾乎相同的圖片。自 Android 4.0 (API 級別 14:Ice Cream Sandwich) 起,Android 已納入有損WebP 支援,並自 Android 4.2 (API 級別 17:Jelly Bean) 起支援無損透明的 WebP。

動態設定圖片大小

  • 請讓應用程式根據裝置規格以指定的顯示大小請求圖片,且您的伺服器提供適當大小的圖片。這麼做可將透過網路傳送的資料降到最低,並減少維護各張圖片所需的記憶體容量,藉此提升效能和使用者滿意度。
  • 使用者必須等到使用者下載圖片後,使用者體驗才會降低。請使用適當的圖片大小來解決這些問題。 根據網路類型或網路品質提出圖片大小要求;這個大小可能小於目標顯示大小。
  • 擷取圖片時,動態預留位置 (例如 預先計算的調色盤值或低解析度縮圖) 有助於提升使用者體驗。

使用圖片載入程式庫

  • 應用程式不得擷取任何圖片超過一次。GlidePicasso 等圖片載入程式庫會擷取並快取圖片,並提供掛鉤到您的 View 以顯示預留位置圖片,直到實際圖片已就緒 由於系統會快取圖片,因此這些程式庫會在下次要求圖片時傳回本機副本。
  • 映像檔載入程式庫會管理其快取,並保留最新的映像檔,讓應用程式儲存空間不會無限期增加。

針對網路進行最佳化調整

您可以提供最佳的網路體驗,藉此提升使用者體驗。 舉例來說,您可以將應用程式設為可離線使用、使用 WorkManagerRoom,以及簡化網路要求。

將應用程式設為可離線使用

  • 在鄉村地區以及人口較少的區域,裝置通常會失去網路連線。建立實用的離線狀態,表示使用者隨時都可與您的應用程式互動。做法是將資料儲存在本機、快取資料,並在連線恢復時將傳出要求排入佇列。
  • 在可能的情況下,應用程式不應通知使用者網路連線已中斷。只有在使用者執行需要連線的操作時,使用者才會收到通知。
  • 當裝置缺乏連線時,您的應用程式應代表使用者批次處理網路要求,以便在連線恢復時執行。以電子郵件用戶端為例,即使裝置處於離線狀態,使用者也能撰寫、傳送、讀取、移動及刪除現有郵件。連線恢復之後,即可快取及執行這些作業。這樣一來,無論裝置是否連上網路,應用程式都能提供類似的使用者體驗。

使用 Room 擷取及快取資料

  • 無論應用程式的狀況為何,請確保應用程式使用資料庫或類似的結構在磁碟上儲存所有資料。 使用 Room 永久性程式庫在本機資料庫中快取資料,並在裝置具備網路連線時,使用 WorkManager 更新快取。
  • 應用程式應快取從網路擷取的內容。在提出後續要求之前,應用程式應顯示本機快取資料。無論裝置處於離線狀態,還是速度緩慢的不穩定網路,應用程式都能正常運作。

刪除重複的網路要求

  • 離線優先架構最初會嘗試從本機儲存空間擷取資料,而失敗後會從網路要求資料。從網路擷取後,資料會在本機快取,以供日後擷取。這有助於確保系統只對同一筆資料發出一次網路要求,而後續的本機要求也符合此要求。為了達成此目標,請使用本機資料庫處理長期資料 (通常是 android.database.sqliteSharedPreferences)。
  • 此外,這個架構還能簡化應用程式從離線和線上狀態之間的流程,一面從網路擷取到快取,另一個則從快取擷取資料,然後向使用者顯示。
  • 針對臨時資料,請使用受限的磁碟快取,例如 DiskLruCache。 通常不會經過變更的資料,只能透過網路要求一次快取,並快取供日後使用。這類資料包括圖片,以及新聞報導或社交訊息等非臨時性文件。

調整資料移轉

為了讓應用程式享有更優質的使用者體驗,您可以透過多種方式來調整網路狀況。例如,可排定網路要求的優先順序,以盡量減少使用者等待資訊的時間。這項功能也可以偵測並調整網路連線速度較慢,以及在網路連線中出現的變更。

優先處理頻寬

  • 請勿假設裝置已連線至任何網路穩定且穩定。因此,應用程式應優先處理網路要求,以便盡快向使用者顯示最實用的資訊。
  • 相較於即時提供使用者所需的資訊,立即呈現清楚可見的資訊有助於改善使用者體驗。這麼做可減少使用者需要等待的時間,並提高應用程式在速度緩慢時網路的實用性。
  • 為了達成這個目標,請安排您的網路要求,在互動式多媒體之前擷取文字。文字要求通常較小、壓縮更為流暢,因此可加快傳輸速度,進而讓應用程式能迅速顯示實用內容。如要進一步瞭解如何管理網路要求,請參閱有關管理網路用量的 Android 訓練課程。

在連線速度緩慢時減少頻寬用量

  • 網路連線能否及時轉移資料取決於網路連線。偵測網路品質並調整應用程式的使用方式,有助於提供優質的使用者體驗。
  • 您可以使用下列方法偵測基礎網路品質。您的應用程式應使用以下方法的資料來自訂網路使用狀況,以便持續及時回應使用者動作:
  • 在網路連線速度緩慢時,您可以只下載低解析度的媒體,甚至完全不下載。如此可確保使用者可在連線速度緩慢時使用應用程式。當您沒有圖片或圖片仍在載入中時,應一律顯示預留位置。您可以使用 調色盤資料庫來產生與目標圖片相符的預留位置顏色,藉此建立動態預留位置。
  • 在搭載 Android 7.0 (API 級別 24) 以上版本的裝置上,使用者可以開啟數據節省模式設定,盡可能減少數據用量。Android 7.0 擴充了 ConnectivityManager 來偵測數據節省模式設定。如要進一步瞭解這項功能,請參閱數據節省模式

偵測網路變更,然後變更應用程式行為

  • 網路品質並非靜態;會因位置、網路流量和當地人口密度而有所變動。應用程式應偵測網路中的變化,並據此調整頻寬。如此一來,您的應用程式就能根據網路品質提供專屬的使用者體驗。使用下列方法偵測網路狀態:
  • 網路品質降低時,請降低要求的數量和大小。隨著連線品質改善,您可以將要求擴充至最佳等級。
  • 在品質較高且非計量付費的網路中,請考慮 預先擷取資料,讓資料預先傳輸。從使用者體驗的角度來看,這可能表示新聞應用程式應用程式可透過 2G 網路一次擷取三篇報導,但在 Wi-Fi 網路中一次擷取 20 篇文章。如要進一步瞭解如何根據網路變更來調整應用程式行為,請參閱 Android 訓練課程 監控連線狀態一節。
  • 網路連線發生變更時,系統會傳送廣播 CONNECTIVITY_CHANGE。應用程式於前景運作時,您可以呼叫 registerReceiver 以接收這個廣播。收到廣播後,您應該重新評估目前的網路狀態,並妥善調整 UI 和網路的使用情況。請不要在資訊清單中宣告此接收器,因為 Android 7.0 (API 級別 24) 以上版本將無法使用此接收器。 如要進一步瞭解這個問題和其他 Android 7.0 的變更,請參閱 Android 7.0 異動

其他資源

如要進一步瞭解如何支援各種連線速度,請參閱下列資源:

網誌文章