造福數十億使用者

全球超過半數的使用者會透過 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 來接收這個廣播訊息。收到廣播訊息後,您應重新評估目前的網路狀態,並適當調整使用者介面和網路的使用方式。請勿在資訊清單中宣告這個接收器,因為 Android 7.0 (API 級別 24) 以上版本不支援這項功能。如要進一步瞭解這項變更,以及 Android 7.0 中的其他變更,請參閱 Android 7.0 變更

其他資源

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

網誌文章