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 cara model konektivitas aplikasi Anda berinteraksi dengannya. Kemudian, artikel ini menawarkan beberapa teknik yang, jika diikuti, akan membantu meminimalkan efek konsumsi data aplikasi Anda terhadap baterai.
Mesin status radio
Radio nirkabel di perangkat pengguna memiliki fitur hemat daya bawaan yang membantu meminimalkan jumlah daya baterai yang digunakan. Saat aktif sepenuhnya, radio nirkabel menggunakan daya yang signifikan, tetapi saat tidak aktif atau dalam mode standby, radio menggunakan daya yang sangat sedikit.
Satu faktor penting yang perlu diingat adalah radio tidak dapat berpindah dari mode standby ke mode aktif sepenuhnya secara instan. Ada periode latensi yang terkait dengan "menyalakan" radio. Jadi, baterai bertransisi dari status energi yang lebih tinggi ke status energi yang lebih rendah secara perlahan untuk menghemat daya saat tidak digunakan, sekaligus mencoba meminimalkan latensi yang terkait dengan "menyalakan" 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 sekitar 50%.
- Standby: Status konsumsi daya minimal saat tidak ada koneksi jaringan yang aktif.
Meskipun mengonsumsi daya baterai jauh lebih sedikit, status rendah dan siaga juga menimbulkan latensi yang signifikan terhadap permintaan jaringan. Kembali ke daya penuh dari status rendah memerlukan waktu sekitar 1,5 detik, dan beralih dari standby ke daya penuh dapat memerlukan waktu lebih dari 2 detik.
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 di setiap perangkat, terutama penundaan transisi terkait ("tail time") dan latensi startup, akan bervariasi berdasarkan 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 radio nirkabel 3G standar, 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 biasa karena mencegah latensi yang tidak diinginkan saat pengguna menjelajahi web. Waktu tunggu yang relatif rendah juga memastikan bahwa setelah sesi penjelajahan selesai, radio dapat beralih ke status energi yang lebih rendah.
Sayangnya, pendekatan ini dapat menyebabkan aplikasi tidak efisien pada sistem operasi smartphone modern seperti Android, tempat 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 standar yang dijelaskan sebelumnya, radio akan tetap menggunakan daya penuh selama durasi transfer—ditambah waktu tunggu tambahan selama 5 detik—diikuti dengan 12 detik dalam status energi rendah. Jadi, untuk perangkat 3G standar, setiap sesi transfer data akan menyebabkan radio menggunakan energi selama minimal 18 detik.
Dalam praktiknya, ini berarti bahwa aplikasi yang melakukan transfer data satu detik, tiga kali dalam satu menit, akan membuat radio nirkabel terus aktif, dan memindahkannya kembali ke daya tinggi tepat saat memasuki mode standby.
Gambar 2. Penggunaan daya radio nirkabel relatif untuk transfer satu detik yang berjalan
tiga kali setiap menit. Gambar tidak termasuk latensi "power up" di antara operasi.
Sebagai perbandingan, jika aplikasi yang sama menggabungkan transfer datanya, menjalankan satu transfer 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 mode standby selama 40 detik setiap menit, sehingga menghasilkan pengurangan konsumsi baterai yang signifikan.
Gambar 3. Penggunaan daya radio nirkabel relatif untuk transfer tiga detik yang berjalan sekali setiap menit.
Teknik pengoptimalan
Setelah Anda memahami pengaruh akses jaringan terhadap daya tahan baterai, mari kita bahas beberapa hal yang dapat Anda lakukan untuk membantu mengurangi konsumsi baterai, sekaligus memberikan pengalaman pengguna yang cepat dan lancar.
Transfer data paket
Seperti yang dinyatakan di bagian sebelumnya, menggabungkan transfer data sehingga Anda mentransfer lebih banyak data dengan frekuensi yang lebih jarang adalah salah satu cara terbaik untuk meningkatkan efisiensi baterai.
Tentu saja, hal ini tidak selalu dapat dilakukan jika aplikasi Anda perlu segera menerima atau mengirim data sebagai respons terhadap tindakan pengguna. Anda dapat mengatasinya dengan mengantisipasi dan mengambil data lebih awal. Skenario lain, seperti mengirim log atau analisis ke server dan transfer data lain yang tidak mendesak dan dimulai oleh aplikasi, sangat cocok untuk pengelompokan dan penggabungan. Lihat Mengoptimalkan tugas yang dimulai aplikasi untuk mendapatkan tips tentang cara menjadwalkan transfer jaringan latar belakang.
Mengambil data
Pengambilan data di awal adalah cara efektif lain untuk mengurangi jumlah sesi transfer data independen yang dijalankan aplikasi Anda. Dengan pengambilan data, saat pengguna melakukan tindakan di aplikasi Anda, aplikasi akan mengantisipasi data yang kemungkinan besar akan diperlukan untuk rangkaian tindakan pengguna berikutnya dan mengambil data tersebut dalam satu burst, melalui satu koneksi, dengan kapasitas penuh.
Dengan memuat transfer di awal, Anda mengurangi jumlah aktivasi radio yang diperlukan untuk mendownload data. Hasilnya, Anda tidak hanya menghemat masa pakai baterai, tetapi juga meningkatkan latensi, menurunkan bandwidth yang diperlukan, dan mengurangi waktu download.
Pengambilan data juga memberikan pengalaman pengguna yang lebih baik dengan meminimalkan latensi dalam aplikasi yang disebabkan oleh menunggu download selesai sebelum melakukan tindakan atau melihat data.
Berikut 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 selama sebagian besar sesi membaca berita pengguna saat mereka men-scroll judul, mengubah kategori, dan membaca artikel. Tidak hanya itu, peralihan yang konstan antara status energi mengakibatkan latensi yang signifikan saat beralih kategori atau membaca artikel.
Pendekatan yang lebih baik adalah melakukan pengambilan data di awal dalam jumlah yang wajar saat sistem dimulai, dimulai dengan kumpulan judul berita dan thumbnail pertama—memastikan waktu mulai 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 di awal memberikan banyak manfaat, jika digunakan terlalu agresif, pengambilan data di awal juga berisiko meningkatkan pengurasan baterai dan penggunaan bandwidth— serta kuota download—dengan mendownload data yang tidak digunakan. Penting juga untuk memastikan bahwa pengambilan data di awal tidak menunda startup aplikasi saat aplikasi menunggu pengambilan data di awal selesai. Dalam praktiknya, hal ini mungkin berarti memproses data secara progresif, atau memulai transfer berturut-turut yang diprioritaskan sehingga data yang diperlukan untuk memulai aplikasi didownload dan diproses terlebih dahulu.
Seberapa agresif Anda melakukan pengambilan data di awal bergantung pada ukuran data yang didownload dan kemungkinan data tersebut digunakan. Sebagai panduan kasar, berdasarkan state machine yang dijelaskan sebelumnya, untuk data yang memiliki peluang 50% untuk digunakan dalam sesi pengguna saat ini, Anda biasanya dapat melakukan pengambilan data di awal selama sekitar 6 detik (sekitar 1-2 megabyte) sebelum potensi biaya download data yang tidak digunakan sesuai dengan potensi penghematan dari tidak mendownload data tersebut, sebagai permulaan.
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 besar—seperti file video—harus didownload dalam potongan-potongan secara berkala (setiap 2 hingga 5 menit), yang secara efektif hanya mengambil data video yang kemungkinan akan dilihat dalam beberapa menit ke depan.
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 mendukung kasus penggunaan ini, sehingga Anda dapat 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 koneksi terlebih dahulu menggunakan ConnectivityManager, seperti yang ditunjukkan dalam Memantau status konektivitas dan pengukuran koneksi.
Jika tidak ada jaringan, aplikasi dapat menghemat baterai dengan tidak memaksa radio seluler
untuk menelusuri. Permintaan tersebut kemudian dapat dijadwalkan dan dilakukan dalam batch dengan permintaan lain saat koneksi dibuat.
Koneksi pool
Strategi tambahan yang dapat membantu selain pengelompokan dan pengambilan data, adalah menggabungkan koneksi jaringan aplikasi Anda.
Secara umum, menggunakan kembali koneksi jaringan yang ada lebih efisien daripada memulai koneksi baru. Penggunaan kembali koneksi juga memungkinkan jaringan untuk bereaksi secara lebih cerdas terhadap kemacetan dan masalah data jaringan terkait.
HttpURLConnection dan sebagian besar klien HTTP, seperti OkHttp, mengaktifkan penggabungan koneksi secara default, dan menggunakan kembali koneksi yang sama untuk beberapa permintaan.
Rangkuman dan rencana ke depan
Di bagian ini, Anda telah mempelajari banyak hal tentang radio nirkabel dan beberapa strategi yang dapat diterapkan secara luas untuk memberikan pengalaman pengguna yang cepat dan responsif sekaligus mengurangi pengurasan baterai.
Di bagian berikutnya, kita akan membahas secara mendetail tiga jenis interaksi jaringan yang berbeda dan umum terjadi di sebagian besar aplikasi. Anda akan mempelajari pendorong untuk setiap jenis ini serta teknik dan API modern untuk mengelola interaksi ini secara efisien.