避免使用尚未最佳化的下載內容

您應用程式的部分使用者無法間歇存取網際網路,或是受到限制 因此能下載大量資訊到裝置上你可以 減少使用者與應用程式互動的次數 應用程式需要下載的資料

減少下載次數最基本的方法就是只下載自己下載的資料 需求。就資料而言,是指實作 REST API, 指定查詢標準,使用以下參數限制傳回的資料: 上次更新的時間。

同樣地,下載圖片時 而非下載原尺寸圖片 呼叫。

快取 HTTP 回應

另一項重要技巧是,避免下載重複的資料。你可以 可以降低重複下載相同資料的可能性 快取功能。快取應用程式的資料和資源後,您就能建立 應用程式需要參照的資訊如果應用程式需要 在短時間內多次重複相同的資訊 因此只要下載一次快取即可

請務必盡量積極快取,以減少 下載的資料量一律快取靜態資源,包含 隨選下載,例如原尺寸圖片,只要合理 隨選資源應另行儲存,以便 定期清除隨選快取,以管理其大小。

如要確保快取不會導致應用程式顯示過時的資料, 使用適當的 HTTP 狀態碼和 標題 例如 ETag敬上 和 Last-Modified 標題。方便您判斷相關內容的製作時機。 重新整理。例如:

Kotlin

// url represents the website containing the content to place into the cache.
val conn: HttpsURLConnection = url.openConnection() as HttpsURLConnection
val currentTime: Long = System.currentTimeMillis()
val lastModified: Long = conn.getHeaderFieldDate("Last-Modified", currentTime)

// lastUpdateTime represents when the cache was last updated.
if (lastModified < lastUpdateTime) {
    // Skip update
} else {
    // Parse update
    lastUpdateTime = lastModified
}

Java

// url represents the website containing the content to place into the cache.
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
long currentTime = System.currentTimeMillis();
long lastModified = conn.getHeaderFieldDate("Last-Modified", currentTime);

// lastUpdateTime represents when the cache was last updated.
if (lastModified < lastUpdateTime) {
    // Skip update
} else {
    // Parse update
    lastUpdateTime = lastModified;
}

您可以設定一些網路程式庫來遵循這些狀態碼 標題。使用 OkHttp 例如 用戶端的快取目錄和快取大小,就能讓程式庫使用 HTTP 快取,如以下程式碼範例所示:

Kotlin

val cacheDir = Context.getCacheDir()
val cacheSize = 10L * 1024L * 1024L // 10 MiB
val client: OkHttpClient = OkHttpClient.Builder()
    .cache(Cache(cacheDir, cacheSize))
    .build()

Java

File cacheDir = Context.getCacheDir();
long cacheSize = 10L * 1024L * 1024L; // 10 MiB
OkHttpClient client = new OkHttpClient.Builder()
    .cache(new Cache(cacheDir, cacheSize))
    .build();

設定快取後,您就能直接提供完全快取的 HTTP 要求 無需開啟網路連線。 有條件快取的回應可以從伺服器驗證回應的即時性, 省下與下載作業相關的頻寬成本。未快取的回應 則儲存在回應快取中,以供日後要求使用。

您可以透過以下方式,將非機密資料快取至非機密資料: 使用 Context.getExternalCacheDir()。 此外,您可以透過下列方式,在安全的代管應用程式快取中快取資料: 使用 Context.getCacheDir()。 請注意,如果系統在 可用的儲存空間

使用存放區

如需更複雜的快取方法,請考慮使用存放區設計 。包括建立自訂類別,也就是所謂的「存放區」 可提供某些特定資料或資源的 API 抽象化機制。存放區 一開始可能會從多種來源擷取資料,例如遠端網路服務、 但會向呼叫端在後續呼叫中提供資料的快取版本。這個 採用第 層的間接方法,藉此提供健全的快取策略 這是應用程式專屬的開發工具進一步瞭解如何使用存放區模式 請參閱應用程式指南 架構