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.