アプリの一部のユーザーは、インターネットへのアクセスが断続的であるか、制限が設定されています デバイスにダウンロードできる情報量に 限界があります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 抽象化します。リポジトリ 最初にリモート ウェブサービス、 ただし、後続の呼び出しでは、データのキャッシュ バージョンを呼び出し元に提供します。この レイヤを使用して、堅牢なキャッシュ戦略を提供できます。 カスタマイズすることもできますリポジトリ パターンの使用方法に関する アプリガイド アーキテクチャをご覧ください。