Konektivitas untuk miliaran

Lebih dari separuh pengguna di seluruh dunia akan menggunakan aplikasi Anda melalui koneksi 2G. Untuk menyempurnakan pengalaman mereka, lakukan pengoptimalan untuk koneksi berkecepatan rendah dan tugas offline dengan menyimpan data, mengantrekan permintaan, dan menangani gambar untuk performa yang optimal.

Di sini, Anda dapat menemukan beberapa tips tentang cara melakukan hal-hal tersebut.

Mengoptimalkan gambar

Ada beberapa cara untuk mempermudah download gambar. Cara tersebut antara lain dengan menayangkan gambar WebP, mengubah ukuran gambar secara dinamis, dan menggunakan library pemuatan gambar.

Menayangkan gambar WebP

  • Tayangkan file WebP melalui jaringan untuk mengurangi waktu pemuatan gambar dan menghemat bandwidth jaringan. File WebP biasanya berukuran lebih kecil daripada format PNG dan JPG-nya, setidaknya dengan kualitas gambar yang sama. Bahkan dengan menggunakan setelan lossy, WebP dapat menghasilkan gambar yang hampir identik dengan aslinya. Android telah menyertakan dukungan WebP lossy sejak Android 4.0 (API level 14: Ice Cream Sandwich), dan dukungan WebP lossless transparan sejak Android 4.2 (API level 17: Jelly Bean).

Mengubah ukuran gambar secara dinamis

  • Atur aplikasi Anda agar meminta gambar pada ukuran rendering target, berdasarkan spesifikasi perangkat, dan server Anda akan menyediakan gambar dengan ukuran yang tepat. Melakukan hal ini akan meminimalkan data yang dikirimkan melalui jaringan dan mengurangi jumlah memori yang diperlukan untuk menyimpan setiap gambar, sehingga dapat meningkatkan performa dan kepuasan pengguna.
  • Pengalaman pengguna akan menjadi tidak menyenangkan bila mereka harus menunggu gambar didownload. Menggunakan ukuran gambar yang tepat akan membantu mengatasi masalah ini. Pertimbangkan untuk membuat permintaan ukuran gambar berdasarkan jenis jaringan atau kualitas jaringan; ukurannya bisa jadi lebih kecil dibandingkan ukuran rendering target.
  • Placeholder dinamis seperti nilai palet pra-komputasi atau thumbnail resolusi rendah dapat meningkatkan pengalaman pengguna saat gambar sedang diambil.

Menggunakan library pemuatan gambar

  • Aplikasi Anda sebaiknya tidak mengambil gambar apa pun lebih dari satu kali. Library pemuatan gambar seperti Glide dan Picasso akan mengambil gambar, meng-cache-nya, dan menyediakan hook ke dalam Tampilan Anda untuk menampilkan gambar placeholder hingga gambar yang sebenarnya siap. Karena gambar di-cache, library ini akan menampilkan salinan lokal pada saat berikutnya gambar diminta.
  • Library pemuatan gambar mengelola cache dengan menyimpan gambar terbaru sehingga penyimpanan aplikasi Anda tidak meningkat tanpa batas.

Mengoptimalkan jaringan

Anda dapat menyempurnakan pengalaman pengguna dengan memberikan pengalaman jaringan yang optimal. Misalnya, Anda dapat membuat aplikasi berguna saat offline, menggunakan WorkManager dan Room, serta menghapus duplikat permintaan jaringan.

Membuat aplikasi dapat digunakan saat offline

  • Di lokasi pedesaan dan daerah tertinggal, biasanya perangkat akan kehilangan konektivitas jaringan. Menciptakan kondisi offline yang berguna berarti pengguna dapat berinteraksi dengan aplikasi Anda setiap saat. Lakukan hal ini dengan menyimpan data secara lokal, meng-cache data, dan mengantrekan permintaan keluar untuk dilaksanakan saat konektivitas dipulihkan.
  • Bila memungkinkan, aplikasi tidak boleh memberi tahu pengguna bahwa konektivitas terputus. Pengguna hanya perlu diberi tahu jika sedang melakukan operasi yang mengutamakan penggunaan konektivitas.
  • Jika perangkat tidak memiliki konektivitas, aplikasi harus mengelompokkan permintaan jaringan—atas nama pengguna—yang dapat dieksekusi saat konektivitas dipulihkan. Contohnya adalah program email yang memungkinkan pengguna menulis, mengirim, membaca, memindahkan, dan menghapus email yang ada, bahkan saat perangkat offline. Operasi tersebut dapat di-cache dan dieksekusi bila konektivitas dipulihkan. Dengan melakukannya, aplikasi dapat memberikan pengalaman pengguna yang mirip baik saat perangkat sedang online maupun offline.

Menggunakan Room untuk mengambil dan meng-cache data

  • Pastikan aplikasi Anda menyimpan semua data di disk menggunakan database atau struktur serupa sehingga akan berperforma optimal, bagaimanapun kondisi jaringannya. Gunakan library persistensi Room untuk meng-cache data dalam database lokal, dan gunakan WorkManager untuk mengupdate cache tersebut jika perangkat memiliki koneksi jaringan.
  • Aplikasi harus meng-cache konten yang diambil dari jaringan. Sebelum membuat permintaan berikutnya, aplikasi harus menampilkan data yang di-cache secara lokal. Hal ini memastikan aplikasi tetap berfungsi meskipun perangkat sedang offline atau berada pada jaringan yang lambat atau tidak bisa diandalkan.

Menghapus duplikat permintaan jaringan

  • Arsitektur offline pada awalnya mencoba mengambil data dari penyimpanan lokal dan, jika tidak berhasil, akan meminta data dari jaringan. Setelah diambil dari jaringan, data di-cache secara lokal untuk pengambilan di masa mendatang. Hal ini membantu memastikan bahwa permintaan jaringan untuk bagian data yang sama hanya terjadi satu kali, dengan permintaan berikutnya dipenuhi secara lokal. Untuk mencapainya, gunakan database lokal untuk data berumur panjang (biasanya android.database.sqlite atau SharedPreferences).
  • Arsitektur ini juga menyederhanakan alur aplikasi antara kondisi offline dan online karena satu sisi mengambil data dari jaringan ke cache, sementara sisi lainnya mengambil data dari cache untuk ditampilkan kepada pengguna.
  • Untuk data sementara, gunakan cache disk terbatas seperti DiskLruCache. Data yang jarang berubah sebaiknya hanya diminta satu kali melalui jaringan dan di-cache untuk digunakan di masa mendatang. Contoh data tersebut adalah gambar dan dokumen non-temporal seperti artikel berita atau postingan sosial.

Menyempurnakan transfer data

Ada beberapa cara yang dapat digunakan aplikasi Anda untuk beradaptasi dengan kondisi jaringan guna memberikan pengalaman pengguna yang lebih baik. Misalnya, aplikasi dapat memprioritaskan permintaan jaringan guna meminimalkan waktu tunggu pengguna untuk mendapatkan informasi. Aplikasi juga dapat mendeteksi dan beradaptasi dengan kecepatan jaringan yang lebih lambat dan perubahan yang mungkin terjadi dalam koneksi jaringan.

Memprioritaskan bandwidth

  • Anda tidak boleh berasumsi bahwa jaringan apa pun tempat perangkat terhubung akan bertahan lama atau dapat diandalkan. Karena alasan ini, aplikasi harus memprioritaskan permintaan jaringan untuk menampilkan informasi yang paling bermanfaat bagi pengguna secepat mungkin.
  • Menyajikan informasi yang jelas dan relevan secepatnya kepada pengguna akan menghadirkan pengalaman pengguna yang lebih baik dibandingkan jika membuat mereka menunggu informasi yang mungkin tidak diperlukan. Hal ini dapat mengurangi waktu tunggu pengguna dan meningkatkan kegunaan aplikasi di jaringan yang lambat.
  • Untuk mencapai hal ini, urutkan permintaan jaringan Anda agar teks diambil sebelum multimedia. Permintaan teks cenderung berukuran lebih kecil, dikompresi lebih baik, dan karenanya ditransfer lebih cepat, sehingga aplikasi Anda dapat menampilkan materi yang bermanfaat dengan cepat. Untuk informasi selengkapnya tentang cara mengelola permintaan jaringan, kunjungi pelatihan Android tentang Mengelola Penggunaan Jaringan.

Menggunakan lebih sedikit bandwidth pada koneksi yang lebih lambat

  • Kemampuan aplikasi Anda untuk mentransfer data secara tepat waktu bergantung pada koneksi jaringan. Mendeteksi kualitas jaringan dan menyesuaikan cara aplikasi menggunakannya dapat membantu memberikan pengalaman terbaik bagi pengguna.
  • Anda dapat menggunakan metode berikut untuk mendeteksi kualitas jaringan yang mendasari. Dengan menggunakan data dari metode ini, aplikasi harus menyesuaikan penggunaan jaringan untuk terus memberikan respons yang tepat waktu terhadap tindakan pengguna:
  • Pada koneksi yang lebih lambat, pertimbangkan untuk hanya mendownload media dengan resolusi yang lebih rendah atau mungkin tidak mendownload sama sekali. Tindakan ini akan memastikan pengguna dapat menggunakan aplikasi pada koneksi lambat. Bila Anda tidak memiliki gambar atau gambar masih sedang dimuat, Anda harus selalu menampilkan placeholder. Anda dapat membuat placeholder dinamis menggunakan library Palet untuk menghasilkan warna placeholder yang sesuai dengan gambar target.
  • Pada perangkat yang didukung Android 7.0 (API level 24) dan yang lebih baru, pengguna dapat mengaktifkan setelan Penghemat Data untuk membantu meminimalkan penggunaan data. Android 7.0 memperluas ConnectivityManager untuk mendeteksi setelan Penghemat Data. Untuk informasi selengkapnya tentang fitur ini, lihat Penghemat Data.

Mendeteksi perubahan jaringan, lalu mengubah perilaku aplikasi

  • Kualitas jaringan tidak bersifat statis, melainkan dapat berubah berdasarkan lokasi, traffic jaringan, dan kepadatan penduduk setempat. Aplikasi harus mendeteksi perubahan di jaringan, lalu menyesuaikan bandwidth. Dengan melakukannya, aplikasi dapat menyesuaikan pengalaman pengguna terhadap kualitas jaringan. Deteksi kondisi jaringan menggunakan metode berikut:
  • Saat kualitas jaringan menurun, perkecil jumlah dan ukuran permintaan. Saat kualitas koneksi meningkat, Anda dapat menaikkan permintaan ke tingkat optimal.
  • Pada jaringan tidak berbayar dengan kualitas lebih tinggi, pertimbangkan untuk mengambil data dan membuatnya tersedia lebih awal. Dari sudut pandang pengalaman pengguna, ini mungkin berarti aplikasi pembaca berita mengambil tiga artikel pada satu waktu di jaringan 2G, tetapi mengambil dua puluh artikel pada satu waktu di jaringan Wi-Fi. Untuk informasi selengkapnya tentang cara menyesuaikan perilaku aplikasi berdasarkan perubahan jaringan, kunjungi pelatihan Android tentang Memantau Status Konektivitas.
  • Siaran CONNECTIVITY_CHANGE dikirim bila terjadi perubahan dalam konektivitas jaringan. Bila aplikasi berada di latar depan, Anda dapat memanggil registerReceiver untuk menerima siaran ini. Setelah menerima siaran, Anda harus mengevaluasi kembali kondisi jaringan saat ini dan menyesuaikan UI serta penggunaan jaringan secara tepat. Anda tidak boleh mendeklarasikan penerima ini dalam manifes Anda karena tidak tersedia di Android 7.0 (API level 24) dan yang lebih tinggi. Untuk informasi selengkapnya tentang hal ini dan perubahan lainnya di Android 7.0, lihat Perubahan Android 7.0.

Referensi lainnya

Untuk mempelajari lebih lanjut dukungan berbagai kecepatan koneksi, lihat referensi berikut:

Postingan blog