最適化されていないダウンロードを避ける

アプリの一部のユーザーは、インターネットへのアクセスが断続的であるか、制限が設定されています デバイスにダウンロードできる情報量に 限界がありますGoogle Chat では アプリの利用頻度を減らすことで、 ダウンロードする必要があります

ダウンロードを減らす最も基本的な方法は、必要なアイテムのみをダウンロードすることです。 できます。データに関しては、REST API を実装することで、 次のようなパラメータを使用して、返されるデータを制限するクエリ条件を指定します。 最終更新日時です。

同様に、画像をダウンロードする際は、ファイルのサイズを小さくし、 フルサイズの画像をダウンロードするのではなく、サーバーサイドで 必要ありません。

HTTP レスポンスをキャッシュに保存する

もう 1 つの重要な手法は、重複データのダウンロードを回避することです。Google Chat では 同じデータが繰り返しダウンロードされる可能性を減らすために、 キャッシュ保存について説明します。アプリのデータとリソースをキャッシュに保存することで、 アプリが参照する必要がある情報。アプリが 同じ情報を短期間に複数回送信する場合は、 キャッシュへのダウンロードは 1 回だけ許可します

総所有コストを減らすには、キャッシュの内容をできるだけ多く 大量のデータはダウンロードされます静的リソースを常にキャッシュに保存する 一定の期間のみ、フルサイズ画像などのオンデマンド ダウンロードを 考えていますオンデマンド リソースは別途保存し、以下を可能にする サイズを管理するために、オンデマンド キャッシュを定期的にフラッシュします。

キャッシュによってアプリに古いデータが表示されないようにするには、 適切な 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 抽象化します。リポジトリ 最初にリモート ウェブサービス、 ただし、後続の呼び出しでは、データのキャッシュ バージョンを呼び出し元に提供します。この レイヤを使用して、堅牢なキャッシュ戦略を提供できます。 カスタマイズすることもできますリポジトリ パターンの使用方法に関する アプリガイド アーキテクチャをご覧ください。