Save the date! Android Dev Summit is coming to Sunnyvale, CA on Oct 23-24, 2019.

Konektivitas untuk miliaran

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

Berikut Anda bisa menemukan beberapa tips untuk menjawab masalah ini.

Optimalkan gambar

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

Tampilkan gambar WebP

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

Gambar ukuran dinamis

  • Atur aplikasi Anda agar meminta gambar pada ukuran rendering target, berdasarkan spesifikasi perangkat, dan server Anda 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 meningkatkan performa dan kepuasan pengguna.
  • Pengalaman pengguna akan turun ketika pengguna harus menunggu gambar dimuat. Menggunakan ukuran gambar yang tepat akan membantu mengatasi masalah ini. Pertimbangkan membuat permintaan ukuran gambar berdasarkan tipe jaringan atau kualitas jaringan; Ukurannya bisa lebih kecil dibandingkan ukuran render target.
  • Placeholder dinamis seperti nilai palet yang telah dikalkulasi terlebih dahulu atau gambar kecil resolusi-rendah bisa meningkatkan pengalaman pengguna selagi gambar diambil.

Gunakan library pemuatan gambar

  • Aplikasi Anda sebaiknya tidak mengambil gambar lebih dari sekali. Library pemuatan gambar seperti Glide dan Picasso mengambil gambar, melakukan cache, dan menyediakan sematan ke Tampilan Anda untuk menampilkan gambar Placeholder sampai gambar yang sebenarnya sudah siap. Karena gambar disimpan di cache, library ini akan mengembalikan salinan lokal pada saat diminta berikutnya.
  • Library pemuatan gambar mengelola cache mereka, menyimpan gambar terbaru sehingga penyimpanan aplikasi Anda tidak bertambah besar tanpa batas.

Optimalkan jaringan

Anda dapat meningkatkan pengalaman pengguna dengan memberikan pengalaman jaringan yang optimal. Sebagai contoh, Anda bisa membuat aplikasi Anda bisa digunakan secara offline, menggunakan GcmNetworkManager dan penyedia materi, dan mendeduplikasi permintaan jaringan.

Jadikan aplikasi Anda dapat digunakan saat offline

  • Di lokasi pedesaan dan daerah tertinggal, biasanya perangkat kehilangan konektivitas jaringan. Membuat kondisi offline berarti pengguna dapat berinteraksi dengan aplikasi Anda setiap saat. Lakukan ini dengan menyimpan data secara lokal, caching data, dan mengantrekan permintaan keluar untuk bertindak ketika konektivitas dipulihkan.
  • Bila memungkinkan, aplikasi tidak boleh memberi tahu pengguna bahwa konektivitas telah hilang. Hanya ketika pengguna melakukan operasi dengan konektivitas sangat diperlukan, baru pengguna perlu diberi tahu.
  • Ketika perangkat tidak memiliki konektivitas, aplikasi Anda harus mengumpulkan permintaan jaringan—atas nama pengguna—yang bisa dieksekusi ketika konektivitas dipulihkan. Contoh dari hal ini adalah klien email yang memungkinkan pengguna untuk menulis, mengirim, membaca, memindahkan, dan menghapus email yang ada bahkan ketika perangkat offline. Operasi ini bisa di-cache dan dijalankan ketika konektivitas dipulihkan. Dengan berbuat demikian, aplikasi ini mampu memberikan pengalaman pengguna yang sama ketika perangkat online atau offline.

Gunakan GcmNetworkManager dan penyedia konten

  • Pastikan aplikasi Anda menyimpan semua data pada disk menggunakan Database atau struktur serupa sehingga bisa berjalan secara optimal dan tidak terpengaruh kondisi jaringan (misalnya, menggunakan SQLite dan ContentProvider). GCM Network Manager ( GcmNetworkManager) menawarkan mekanisme yang tangguh untuk menyinkronkan data dengan server sementara penyedia materi (ContentProvider) menyimpan data ke cache, yang digabung untuk menyediakan arsitektur yang memungkinkan kondisi offline.
  • Aplikasi harus meng-cache materi yang diambil dari jaringan. Sebelum membuat permintaan berikutnya, aplikasi harus menampilkan data cache lokal. Hal ini memastikan aplikasi tetap berfungsi meskipun perangkat sedang offline atau berada pada jaringan yang lambat atau tidak bisa diandalkan.

Hapus duplikat permintaan jaringan

  • Arsitektur offline pada awalnya mencoba untuk mengambil data dari penyimpanan lokal dan, bila tidak berhasil, akan meminta data dari jaringan. Setelah diambil dari jaringan, data di-cache secara lokal jika suatu saat dibutuhkan di masa mendatang. Hal ini membantu memastikan bahwa permintaan jaringan untuk bagian data yang sama hanya terjadi sekali—dengan permintaan selebihnya terpenuhi secara lokal. Untuk melakukannya, 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 di satu sisi mengambil dari jaringan ke cache, sementara di sisi lainnya mengambil data dari cache untuk ditampilkan kepada pengguna.
  • Untuk data sementara, gunakan cache disk terikat misalnya DiskLruCache. Data yang jarang berubah sebaiknya hanya diminta sekali melalui jaringan dan di-cache untuk digunakan nantinya. Contoh data tersebut adalah gambar dan dokumen non-temporer seperti artikel berita atau pengeposan sosial.

Sempurnakan transfer data

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

Prioritaskan bandwidth

  • Anda tidak boleh beranggapan bahwa setiap jaringan yang terhubung ke perangkat bisa stabil dalam jangka panjang atau dapat diandalkan. Karena alasan ini, aplikasi harus memprioritaskan permintaan jaringan untuk menampilkan informasi yang paling bermanfaat bagi pengguna secepat mungkin.
  • Menyajikan kepada pengguna informasi yang relevan dan langsung terlihat akan membuat pengalaman pengguna yang lebih baik dibandingkan jika mereka harus menunggu informasi yang mungkin tidak diperlukan. Proses ini akan mengurangi waktu tunggu pengguna dan meningkatkan kegunaan aplikasi pada jaringan lambat.
  • Untuk mencapai hal ini, urutkan permintaan jaringan Anda sehingga teks diambil sebelum multimedia. Permintaan teks cenderung lebih kecil, kompresi lebih baik, dan karenanya ditransfer lebih cepat, yang berarti bahwa aplikasi Anda bisa menampilkan materi yang bermanfaat secara cepat. Untuk informasi selengkapnya tentang mengelola permintaan jaringan, kunjungi pelatihan Android pada Mengelola Penggunaan Jaringan.

Gunakan lebih sedikit bandwidth pada koneksi yang lebih lambat

  • Kemampuan aplikasi Anda untuk mentransfer data secara tepat waktu tergantung pada koneksi jaringan. Mendeteksi kualitas jaringan dan menyesuaikan cara aplikasi Anda menggunakannya bisa membantu memberikan pengalaman pengguna yang sangat baik.
  • Anda bisa menggunakan metode berikut untuk mendeteksi kualitas jaringan dasar. Menggunakan data dari metode ini, aplikasi Anda harus menyesuaikan penggunaan jaringan agar terus memberikan respons yang tepat untuk tindakan pengguna:
  • Pada koneksi lambat, pertimbangkan untuk hanya mendownload media dengan resolusi yang lebih rendah atau tidak mendownload sama sekali. Hal ini memastikan pengguna bisa menggunakan aplikasi pada koneksi lambat. Saat Anda tidak memiliki gambar atau gambar sedang dimuat, Anda harus selalu menunjukkan Placeholder. Anda bisa membuat Placeholder yang dinamis dengan menggunakan library Palette untuk menghasilkan warna Placeholder yang sesuai dengan gambar target.
  • Pada perangkat yang berbasis Android 7.0 (API level 24) dan yang lebih tinggi, pengguna bisa mengaktifkan setelan Penghemat Data, yang membantu meminimalkan penggunaan data. Android 7.0 memperluas ConnectivityManager untuk mendeteksi setelan Penghemat Data. Untuk informasi selengkapnya tentang fitur ini, silakan lihat Penghemat Data.

Deteksi perubahan jaringan, kemudian ubah perilaku aplikasi

  • Kualitas jaringan tidak bersifat statis; itu bisa berubah berdasarkan lokasi, lalu lintas jaringan, dan kepadatan penduduk setempat. Aplikasi harus mendeteksi perubahan dalam jaringan dan menyesuaikan bandwidth secara tepat. Dengan demikian, aplikasi Anda bisa menyesuaikan pengalaman pengguna dengan kualitas jaringan. Deteksi kondisi jaringan menggunakan metode ini:
  • Ketika kualitas jaringan menurun, kecilkan jumlah dan ukuran permintaan. Ketika kualitas koneksi membaik, Anda bisa meningkatkan permintaan ke tingkat optimal.
  • Pada kualitas yang lebih tinggi, jaringan berbiaya tetap, pertimbangkan mengunduh data lebih dulu agar tersedia jika suatu saat ingin dipakai. Dari sudut pandang pengalaman pengguna, ini berarti mungkin saja aplikasi pembaca berita hanya mengunduh tiga artikel pada waktu di jaringan 2G namun mengunduh dua puluh artikel pada waktu di Wi-Fi. Untuk informasi selengkapnya tentang menyesuaikan perilaku aplikasi berdasarkan perubahan jaringan, kunjungi pelatihan Android pada Memantau Status Konektivitas.
  • Siaran CONNECTIVITY_CHANGE dikirim bila terjadi perubahan dalam konektivitas jaringan. Bila aplikasi di latar depan, Anda bisa 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 di manifes, karena tidak tersedia di Android 7.0 (API level 24) dan yang lebih tinggi. Untuk informasi selengkapnya tentang ini dan perubahan lain dalam Android 7.0, silakan lihat Perubahan Android 7.0.