Mengoptimalkan penggunaan baterai untuk API penjadwalan tugas

Halaman ini menyarankan beberapa praktik terbaik untuk menyiapkan tugas latar belakang yang berperilaku baik. Praktik terbaik ini secara khusus ditujukan untuk mengurangi konsumsi baterai, tetapi juga dapat meningkatkan performa perangkat dengan cara lain, seperti mengurangi penggunaan jaringan.

Memilih batasan optimal dan menggabungkan tugas

Untuk meminimalkan beban yang ditempatkan tugas di perangkat, penting untuk menentukan batasan optimal. (Untuk tugas JobScheduler, lihat JobInfo.Builder untuk daftar batasan.) Untuk mengambil satu contoh, jika ingin memastikan aplikasi tidak menghabiskan daya baterai, sebaiknya tentukan batasan RequiresCharging. Batasan ini memberi tahu sistem untuk tidak menjalankan tugas kecuali jika level baterai benar-benar meningkat. Demikian pula, penggunaan Wi-Fi umumnya memerlukan daya lebih sedikit daripada data seluler. Jadi, jika tugas Anda memerlukan koneksi jaringan, tetapi dapat menunggu hingga jaringan tidak berbayar tersedia, sebaiknya setel batasan NetworkType.UNMETERED.

Selain itu, jika Anda memiliki beberapa tugas serupa yang memiliki batasan yang sama, sebaiknya gabungkan menjadi satu tugas, sehingga perangkat hanya akan aktif sekali. Misalnya, aplikasi Anda memiliki tiga set data berbeda yang perlu disinkronkan dengan Cloud Storage. Daripada menjadwalkan tiga tugas yang berbeda–satu untuk setiap set data–biasanya lebih baik jika Anda cukup menjadwalkan satu tugas "menyinkronkan data", menentukan batasan yang sesuai, dan membiarkan tugas tersebut melakukan semua sinkronisasi data yang tertunda saat dijalankan.

Meskipun demikian, Anda tidak boleh mencoba menggabungkan tugas yang tidak terkait menjadi satu tugas untuk semua. Sebagai gantinya, pastikan untuk memberikan batasan yang sesuai pada setiap tugas. Misalnya, jika tugas berprioritas rendah, pastikan untuk menentukannya agar dijalankan saat perangkat sedang tidak ada aktivitas dan mengisi daya. Dengan demikian, meskipun perangkat diaktifkan beberapa kali, hal tersebut tidak akan mengganggu pengalaman pengguna atau memengaruhi masa pakai baterai.

Hanya tandai tugas sebagai diprioritaskan jika mendesak

Jika tugas bersifat sangat mendesak, Anda dapat menandainya sebagai diprioritaskan. (Untuk tugas JobScheduler, panggil JobInfo.Builder.setExpedited(true).) Tindakan tersebut akan memprioritaskan tugas dengan beberapa cara. Misalnya, sistem akan segera menjalankan tugas-tugas tersebut jika memungkinkan, dan pembatasan pengelolaan daya cenderung tidak memengaruhi tugas yang diprioritaskan.

Oleh karena itu, Anda harus berhati-hati untuk hanya menandai tugas sebagai dipercepat jika diperlukan. Karena tugas yang diprioritaskan dapat mengganti beberapa efisiensi sistem, tugas yang diprioritaskan dapat menghabiskan lebih banyak daya daripada jika tidak ditandai dengan cara tersebut.

Anda hanya boleh menandai tugas sebagai diprioritaskan jika sensitif terhadap waktu, dan pengalaman pengguna akan terganggu jika tugas membutuhkan waktu lebih lama untuk dijalankan. Misalnya, jika aplikasi Anda menjalankan tugas untuk menangani pesan FCM prioritas tinggi, itulah alasan yang tepat untuk menandai tugas tersebut sebagai diprioritaskan. Namun, jangan menandai tugas sebagai diprioritaskan hanya untuk mengganti pengoptimalan sistem.

Memeriksa alasan tugas Anda dihentikan

Jika tugas Anda berhenti sebelum selesai, Anda dapat memeriksa alasan penghentian tugas tersebut dengan memanggil WorkInfo.getStopReason(). (Untuk tugas JobScheduler, panggil JobParameters.getStopReason() Penting untuk melakukannya karena beberapa alasan. Pertama-tama, tentu saja, Anda ingin tugas Anda selesai. Mencari tahu mengapa tugas Anda berhenti akan membantu Anda menghindari situasi yang serupa. Namun, sistem mungkin juga menghentikan tugas karena perilaku yang menggunakan resource sistem secara berlebihan. Anda tidak ingin aplikasi menjadi pengguna yang buruk, menggunakan baterai atau jaringan yang tidak perlu.

Misalnya, jika tugas Anda sering dihentikan dengan alasan STOP_REASON_TIMEOUT, mungkin ada kasus ekstrem yang terkadang menyebabkan tugas Anda memerlukan waktu lebih lama dari yang Anda harapkan.

Sebaiknya gunakan mesin analisis untuk melacak apakah tugas aplikasi Anda dihentikan, dan apa alasannya.