Penggunaan radio nirkabel untuk mentransfer data berpotensi menjadi salah satu sumber konsumsi daya baterai paling signifikan pada aplikasi Anda. Untuk meminimalkan konsumsi daya baterai akibat aktivitas jaringan, Anda perlu memahami pengaruh model konektivitas Anda pada hardware radio yang mendasarinya.
Bagian ini memperkenalkan mesin status radio nirkabel dan menjelaskan bagaimana model konektivitas aplikasi berinteraksi dengannya. Kemudian program ini menawarkan beberapa teknik yang, jika diikuti, akan membantu meminimalkan efek data aplikasi Anda konsumsi baterai.
Mesin status radio
Radio nirkabel di perangkat pengguna Anda memiliki fitur hemat daya bawaan yang membantu meminimalkan jumlah daya baterai yang digunakan. Saat sepenuhnya aktif, radio nirkabel mengonsumsi daya yang signifikan, tetapi saat tidak aktif atau dalam mode standby, radio mengonsumsi daya yang sangat sedikit.
Satu faktor penting yang perlu diingat adalah radio tidak dapat berpindah dari mode standby ke aktif sepenuhnya secara instan. Ada periode latensi yang terkait dengan "menyalakan energi" radio. Sehingga baterai bertransisi dari keadaan energi yang lebih tinggi ke keadaan energi yang lebih rendah secara perlahan untuk menghemat daya saat tidak digunakan mencoba meminimalkan latensi yang terkait dengan "penyalaan ulang" radio.
Mesin status untuk radio jaringan 3G standar terdiri dari tiga status energi:
- Daya penuh: Digunakan saat koneksi aktif, memungkinkan perangkat mentransfer data pada tingkat tertinggi yang dimungkinkan.
- Daya rendah: Status menengah yang mengurangi konsumsi daya baterai sebesar sekitar 50%.
- Siaga: Status konsumsi daya minimal saat tidak ada jaringan koneksi aktif.
Meskipun mengonsumsi daya baterai jauh lebih sedikit, status rendah dan siaga juga menimbulkan latensi yang signifikan terhadap permintaan jaringan. Diperlukan waktu sekitar 1,5 detik untuk mengembalikan status energi dari daya rendah ke daya penuh, dan lebih dari 2 detik dari siaga ke daya penuh.
Untuk meminimalkan latensi, mesin status menerapkan penundaan untuk menunda transisi ke status energi yang lebih rendah. Gambar 1 menggunakan pengaturan waktu AT&T untuk radio 3G standar.
Gambar 1. Mesin status radio nirkabel 3G standar.
Mesin status radio pada setiap perangkat, terutama penundaan transisi ("waktu akhir") dan latensi pengaktifan yang terkait, akan bervariasi bergantung pada teknologi radio nirkabel yang digunakan (3G, LTE, 5G, dan sebagainya) serta ditentukan dan dikonfigurasi oleh jaringan operator tempat perangkat beroperasi.
Halaman ini menjelaskan mesin status representatif untuk jaringan nirkabel 3G standar radio, berdasarkan data yang disediakan oleh AT&T. Namun, prinsip umum dan praktik terbaik yang dihasilkan berlaku untuk semua implementasi radio nirkabel.
Pendekatan ini sangat efektif untuk penjelajahan web seluler standar karena mencegah latensi yang tidak diinginkan saat pengguna menjelajahi web. Waktu akhir yang relatif rendah juga memastikan bahwa setelah sesi penjelajahan selesai, radio dapat beralih ke status energi yang lebih rendah.
Sayangnya, pendekatan ini dapat mengakibatkan aplikasi yang tidak efisien pada sistem operasi smartphone modern seperti Android, di mana aplikasi berjalan di latar depan (tempat latensi penting) dan di latar belakang (tempat masa pakai baterai harus diprioritaskan).
Cara aplikasi memengaruhi mesin status radio
Setiap kali Anda membuat koneksi jaringan baru, radio beralih ke status daya penuh. Dalam kasus mesin status radio 3G khusus yang dijelaskan sebelumnya, perangkat akan tetap memiliki daya penuh selama durasi transfer Anda—plus tambahan 5 detik waktu ekor—diikuti 12 detik dengan energi rendah status. Jadi, untuk perangkat 3G standar, setiap sesi transfer data akan menyebabkan radio mengonsumsi energi setidaknya selama 18 detik.
Dalam praktiknya, hal ini berarti aplikasi yang melakukan transfer data satu detik, tiga kali per menit, akan membuat radio nirkabel aktif terus-menerus, dan baru mengalihkannya kembali ke daya tinggi saat radio hendak memasuki mode siaga.
Gambar 2. Penggunaan daya radio nirkabel relatif untuk transfer satu detik yang berjalan
tiga kali setiap menit. Gambar tidak menyertakan latensi "mengaktifkan" di antara proses.
Sebagai perbandingan, jika aplikasi yang sama memaketkan transfer datanya, menjalankan satu transfer berdurasi tiga detik setiap menit, hal ini akan membuat radio tetap dalam status daya tinggi selama total hanya 20 detik setiap menit. Hal ini akan memungkinkan radio berada dalam status siaga selama 40 detik setiap menitnya, sehingga menghasilkan pengurangan signifikan dalam konsumsi daya baterai.
Gambar 3. Penggunaan daya radio nirkabel relatif untuk transfer tiga detik
yang berjalan satu kali setiap menit.
Teknik pengoptimalan
Setelah Anda memahami pengaruh akses jaringan terhadap masa pakai baterai, mari kita bahas beberapa hal yang dapat Anda lakukan untuk membantu mengurangi penggunaan baterai, sekaligus memberikan pengalaman pengguna yang cepat dan lancar.
Membundel transfer data
Seperti yang dinyatakan di bagian sebelumnya, memaketkan transfer data sehingga Anda lebih jarang mentransfer lebih banyak data adalah salah satu cara terbaik untuk meningkatkan efisiensi baterai.
Tentu saja, ini tidak selalu bisa dilakukan jika aplikasi Anda perlu menerima atau mengirim data segera sebagai respons atas tindakan pengguna. Anda dapat memitigasi ini dengan mengantisipasi dan pengambilan data. Skenario lain, seperti mengirim log atau analisis ke server dan transfer data yang tidak mendesak dan dimulai aplikasi lainnya, sangat cocok untuk pengelompokan dan pengelompokan. Lihat Mengoptimalkan tugas yang dimulai oleh aplikasi untuk mendapatkan tips tentang cara menjadwalkan transfer jaringan latar belakang.
Mengambil data
Pengambilan data adalah cara efektif lain untuk mengurangi jumlah sesi transfer data yang dijalankan aplikasi Anda. Dengan prefetching, saat pengguna melakukan tindakan di aplikasi Anda, aplikasi akan memperkirakan data yang kemungkinan besar diperlukan untuk serangkaian tindakan pengguna berikutnya, dan mengambil data tersebut dalam satu burst, melalui satu koneksi, pada kapasitas penuh.
Dengan memuat transfer di awal, Anda mengurangi jumlah aktivasi radio yang diperlukan untuk mendownload data. Hasilnya, Anda tidak hanya menghemat daya tahan baterai, tetapi juga meningkatkan latensi, menurunkan bandwidth yang diperlukan, dan mengurangi download kali.
Pengambilan data juga memberikan pengalaman pengguna yang lebih baik dengan meminimalkan latensi dalam aplikasi yang disebabkan oleh menunggu selesainya proses download sebelum melakukan tindakan atau melihat data.
Berikut adalah contoh praktisnya.
Aplikasi pembaca berita
Banyak aplikasi berita berupaya mengurangi penggunaan bandwidth dengan hanya mendownload judul setelah suatu kategori dipilih, artikel lengkap setelah pengguna memilih untuk membacanya, dan thumbnail tepat saat mereka men-scroll tampilan.
Dengan pendekatan ini, radio dipaksa untuk tetap aktif sepanjang sebagian besar sesi membaca pengguna, selama mereka men-scroll judul, berpindah kategori, dan membaca artikel. Selain itu, peralihan terus-menerus antara beberapa status energi akan mengakibatkan latensi yang signifikan saat beralih kategori atau membaca artikel.
Pendekatan yang lebih baik adalah mengambil data sejumlah yang wajar saat startup, dimulai dengan serangkaian pertama judul berita dan thumbnail—yang memastikan waktu startup latensi rendah—dan melanjutkan dengan judul dan thumbnail yang tersisa, serta teks artikel untuk setiap artikel yang tersedia dari setidaknya daftar judul utama.
Alternatif lainnya adalah mengambil data setiap judul, thumbnail, teks artikel, dan bahkan mungkin gambar artikel lengkap—biasanya di latar belakang pada jadwal yang telah ditentukan. Pendekatan ini berisiko menghabiskan bandwidth dan masa pakai baterai secara signifikan untuk mendownload konten yang tidak benar-benar digunakan, sehingga sebaiknya diimplementasikan dengan hati-hati.
Pertimbangan tambahan
Meskipun pengambilan data memiliki banyak manfaat, jika digunakan terlalu agresif, pengambilan data juga menimbulkan risiko berupa meningkatnya konsumsi daya baterai dan penggunaan bandwidth—serta kuota download—dengan mendownload data yang tidak digunakan. Hal ini juga untuk memastikan bahwa pengambilan data tidak menunda pengaktifan aplikasi saat aplikasi menunggu pengambilan data selesai. Dalam praktiknya, hal itu dapat berarti memproses data secara progresif, atau memulai transfer berurutan yang diprioritaskan sehingga data yang diperlukan untuk pengaktifan aplikasi didownload dan diproses terlebih dahulu.
Seberapa agresif Anda mengambil data bergantung pada ukuran data yang diunduh dan kemungkinan penggunaannya. Sebagai panduan kasar, berdasarkan mesin negara yang dijelaskan sebelumnya, untuk data yang memiliki peluang 50% digunakan dalam sesi pengguna saat ini, Anda biasanya dapat mengambil data sekitar 6 detik (sekitar 1-2 megabyte) sebelum potensi biaya download yang tidak digunakan data cocok dengan potensi penghematan jika tidak diunduh data tersebut sejak awal.
Secara umum, sebaiknya ambil data sedemikian rupa sehingga Anda hanya perlu memulai download baru setiap 2 hingga 5 menit, dan dalam urutan 1 hingga 5 megabyte.
Dengan mengikuti prinsip ini, download berukuran besar, seperti file video, sebaiknya dilakukan sebagai potongan-potongan dalam interval yang teratur (setiap 2 hingga 5 menit), sehingga secara efektif Anda hanya mengambil data video yang kemungkinan akan ditonton dalam beberapa menit berikutnya.
Salah satu solusinya adalah menjadwalkan agar download lengkap hanya berjalan saat perangkat terhubung ke Wi-Fi, dan mungkin hanya saat daya perangkat sedang diisi. WorkManager API secara tepat mendukung kasus penggunaan ini, yang memungkinkan Anda membatasi pekerjaan latar belakang hingga perangkat memenuhi kriteria yang ditentukan developer, seperti mengisi daya dan terhubung ke Wi-Fi.
Memeriksa konektivitas sebelum membuat permintaan
Mencari sinyal seluler adalah salah satu operasi yang paling menguras daya pada
perangkat seluler. Praktik terbaik untuk permintaan yang dimulai pengguna
adalah memeriksa terlebih dahulu
koneksi menggunakan
ConnectivityManager
, seperti yang ditunjukkan di
Memantau status konektivitas dan koneksi
pengukuran.
Jika tidak ada jaringan, aplikasi dapat menghemat baterai dengan tidak melakukan penelusuran secara otomatis menggunakan radio seluler. Permintaan kemudian dapat dijadwalkan dan dilakukan dalam batch dengan permintaan
lain saat koneksi dibuat.
Koneksi kolam renang
Strategi tambahan yang dapat membantu selain pengelompokan dan pengambilan data sebelumnya adalah menggabungkan koneksi jaringan aplikasi Anda.
Umumnya lebih efisien untuk menggunakan kembali koneksi jaringan yang ada daripada untuk memulai konversi baru. Menggunakan kembali koneksi juga memungkinkan jaringan untuk bereaksi lebih cerdas terhadap kemacetan dan masalah data jaringan yang terkait.
HttpURLConnection
dan sebagian besar klien HTTP, seperti OkHttp, mengaktifkan pengumpulan koneksi secara default, dan menggunakan kembali koneksi yang sama untuk beberapa permintaan.
Recap dan melihat ke depan
Di bagian ini, Anda telah mempelajari banyak hal tentang radio nirkabel dan beberapa strategi yang dapat Anda terapkan secara luas untuk memberikan pengalaman pengguna yang cepat dan responsif sekaligus mengurangi penggunaan baterai.
Di bagian berikutnya, kita akan melihat secara mendetail tiga jenis interaksi jaringan yang umum untuk sebagian besar aplikasi. Anda akan mempelajari driver untuk setiap jenis ini serta teknik dan API modern untuk mengelola interaksi ini secara efisien.