Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Menghindari download yang berlebihan

Banyak pengguna aplikasi Anda yang memiliki akses intermiten ke Internet atau memiliki batasan jumlah informasi yang dapat mereka download ke perangkatnya. Anda dapat mendorong pengguna agar lebih sering berinteraksi dengan aplikasi Anda melalui pengurangan jumlah data yang perlu didownload aplikasi.

Cara paling mendasar untuk mengurangi download adalah dengan mendownload hal yang dibutuhkan saja. Perihal data, caranya yaitu mengimplementasikan REST API untuk memungkinkan Anda menentukan kriteria kueri yang membatasi data ditampilkan menggunakan berbagai parameter, seperti waktu update terakhir.

Demikian pula saat mendownload gambar, sebaiknya Anda mengurangi ukuran sisi server gambar, dan bukan mendownload gambar berukuran penuh yang dikurangi pada sisi klien.

Menyimpan cache file secara lokal

Cara penting lainnya adalah menghindari download data rangkap. Anda dapat mengurangi kemungkinan download bagian data yang sama secara berulang dengan melakukan caching. Dengan melakukan caching pada data dan resource aplikasi, Anda akan membuat salinan lokal informasi yang perlu dirujuk oleh aplikasi. Jika aplikasi Anda perlu mengakses informasi yang sama beberapa kali selama periode waktu yang singkat, Anda hanya perlu mendownloadnya ke dalam cache satu kali.

Sangat penting untuk melakukan cache seaktif mungkin demi mengurangi jumlah total data yang didownload. Selalu lakukan cache resource statis, termasuk download sesuai permintaan seperti gambar ukuran penuh, selama masih dalam batas wajar. Resource sesuai permintaan harus disimpan secara terpisah agar Anda dapat membersihkan cache sesuai permintaan Anda secara teratur untuk mengelola ukurannya.

Untuk memastikan bahwa caching Anda tidak menyebabkan aplikasi menampilkan data basi, pastikan mengekstrak waktu pembaruan terakhir konten yang diminta, dan waktu kedaluwarsanya, dari dalam header respons HTTP. Hal ini akan memungkinkan Anda menentukan kapan konten terkait harus diperbarui.

Kotlin

    val conn: HttpsURLConnection = url.openConnection() as HttpsURLConnection
    val currentTime: Long = System.currentTimeMillis()
    val expires: Long = conn.getHeaderFieldDate("Expires", currentTime)
    val lastModified: Long = conn.getHeaderFieldDate("Last-Modified", currentTime)
    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 expires = conn.getHeaderFieldDate("Expires", currentTime);
    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;
    }
    

Dengan pendekatan ini, Anda juga dapat secara efektif melakukan cache pada konten dinamis, serta memastikannya tidak menyebabkan aplikasi Anda menampilkan informasi basi.

Anda dapat melakukan cache data tidak sensitif di direktori cache eksternal yang tidak dikelola, yang diperoleh melalui Context#getExternalCacheDir()."

Atau, Anda dapat menggunakan cache aplikasi terkelola dan aman yang diperoleh melalui Konteks#getCacheDir(). Harap diketahui bahwa cache internal ini mungkin dikosongkan saat penyimpanan yang tersedia dalam sistem hampir habis.

Catatan: File yang disimpan di salah satu lokasi cache akan dihapus saat aplikasi di-uninstal.

Menggunakan Cache Respons HttpsURLConnection

Android 4.0 menambahkan cache respons ke HttpsURLConnection. Anda dapat mengaktifkan caching respons HTTP pada perangkat yang didukung menggunakan refleksi sebagai berikut:

Kotlin

    private fun enableHttpResponseCache() {
        try {
            val httpCacheSize: Long = 10L * 1024L * 1024L // 10 MiB
            val httpCacheDir = File(cacheDir, "http")
            Class.forName("android.net.http.HttpResponseCache")
                    .getMethod("install", File::class.java, Long::class.javaPrimitiveType)
                    .invoke(null, httpCacheDir, httpCacheSize)
        } catch (httpResponseCacheNotAvailable: Exception) {
            Log.d(TAG, "HTTP response cache is unavailable.")
        }
    }
    

Java

    private void enableHttpResponseCache() {
      try {
        long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
        File httpCacheDir = new File(getCacheDir(), "http");
        Class.forName("android.net.http.HttpResponseCache")
             .getMethod("install", File.class, long.class)
             .invoke(null, httpCacheDir, httpCacheSize);
      } catch (Exception httpResponseCacheNotAvailable) {
        Log.d(TAG, "HTTP response cache is unavailable.");
      }
    }
    

Kode sampel ini akan mengaktifkan cache respons pada perangkat Android 4.0+ tanpa memengaruhi rilis sebelumnya.

Dengan cache yang telah diinstal, permintaan HTTP yang di-cache akan sepenuhnya dapat dilayani langsung dari penyimpanan lokal, sehingga tidak perlu membuka koneksi jaringan. Respons yang di-cache secara bersyarat dapat memvalidasi sifat baru dari server, meniadakan biaya bandwidth yang terkait dengan download.

Respons yang tidak di-cache akan disimpan dalam cache respons untuk permintaan mendatang.