Mengoptimalkan penggunaan lokasi untuk masa pakai baterai

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.