Lakukan tindakan berikut untuk meningkatkan dampak aplikasi Anda terhadap masa pakai baterai perangkat saat menggunakan layanan lokasi.
Menghapus update lokasi
Gagal menghapus update lokasi ketika tidak lagi dibutuhkan merupakan sumber umum pengurasan baterai yang tidak perlu.
Hal ini dapat terjadi saat metode siklus proses onStart()
atau onResume()
aktivitas berisi panggilan ke requestlocationUpdates()
tanpa
panggilan yang sesuai ke removeLocationUpdates()
di metode siklus proses onPause()
atau
onStop()
.
Anda dapat menggunakan komponen berbasis siklus proses untuk mengelola siklus proses aktivitas di aplikasi Anda dengan lebih baik. Untuk informasi selengkapnya, lihat Menangani Siklus Proses dengan Komponen Berbasis Siklus Proses.
Menyetel waktu tunggu
Untuk mencegah pengurasan baterai, setel waktu tunggu yang wajar bila update lokasi harus berhenti. Waktu tunggu memastikan bahwa update tidak berlanjut terus-menerus, dan ini melindungi aplikasi di skenario ketika update diminta tetapi tidak dihapus (misalnya, karena bug dalam kode).
Untuk permintaan penyedia lokasi gabungan, tambahkan waktu tunggu dengan memanggil
setExpirationDuration()
, yang menerima parameter yang mewakili
waktu dalam milidetik sejak metode terakhir dipanggil. Anda juga dapat menambahkan
waktu tunggu dengan memanggil setExpirationTime()
, yang menerima parameter yang
mewakili waktu habis masa berlaku dalam milidetik sejak sistem terakhir melakukan booting.
Untuk menambahkan waktu tunggu ke permintaan lokasi pembatasan wilayah, panggil metode
setExpirationDuration()
.
Permintaan batch
Untuk semua kasus penggunaan yang bukan latar depan, batch beberapa permintaan bersama. Gunakan metode
setInterval()
untuk menentukan interval tempat Anda ingin
lokasi dihitung. Kemudian, gunakan metode setMaxWaitTime()
untuk menetapkan
interval tempat lokasi dikirimkan ke aplikasi Anda. Teruskan nilai ke
metode setMaxWaitTime()
yang merupakan kelipatan dari nilai yang diteruskan ke
metode setInterval()
. Misalnya, perhatikan permintaan lokasi berikut:
Kotlin
val request = LocationRequest()
request.setInterval(10 * 60 * 1000)
request.setMaxWaitTime(60 * 60 * 1000)
Java
LocationRequest request = new LocationRequest();
request.setInterval(10 * 60 * 1000);
request.setMaxWaitTime(60 * 60 * 1000);
Dalam hal ini, sistem menghitung lokasi kira-kira setiap sepuluh menit dan mengirimkan sekitar enam titik data lokasi dalam batch kira-kira setiap jam. Saat Anda masih mendapatkan update lokasi setiap sekitar sepuluh menit, Anda menghemat baterai karena perangkat Anda hanya akan diaktifkan setiap sekitar satu jam.
Menggunakan update lokasi pasif
Dalam kasus penggunaan latar belakang, ada baiknya membatasi update lokasi. Batas Android 8.0 (API level 26) menerapkan praktik ini, tetapi aplikasi yang berjalan di perangkat yang lebih rendah harus berusaha membatasi lokasi latar belakang sebanyak mungkin.
Kemungkinan saat aplikasi Anda berada dalam latar belakang, aplikasi lain mungkin sering meminta update lokasi di latar depan. Layanan lokasi menyediakan update ini untuk aplikasi Anda. Pertimbangkan permintaan lokasi berikut, yang secara oportunistik menggunakan data lokasi:
Kotlin
val request = LocationRequest()
request.setInterval(15 * 60 * 1000)
request.setFastestInterval(2 * 60 * 1000)
Java
LocationRequest request = new LocationRequest();
request.setInterval(15 * 60 * 1000);
request.setFastestInterval(2 * 60 * 1000);
Pada contoh sebelumnya, lokasi aplikasi dihitung kira-kira setiap 15 menit. Jika aplikasi lain meminta lokasi, aplikasi akan menerima data dengan interval maksimum dua menit.
Walaupun penggunaan lokasi secara pasif tidak mengakibatkan pengurasan baterai, hati-hati dalam
kasus saat penerimaan data lokasi memicu operasi I/O atau CPU
yang berat. Untuk meminimalkan penggunaan baterai, interval yang ditetapkan dalam
setFastestInterval()
tidak boleh terlalu kecil.