Ditulis oleh Luiz Gustavo Martins, Partner Developer Advocate, Partner DevRel
Ini adalah seri entri blog ketiga yang menguraikan strategi dan panduan di Android berkenaan dengan daya.
Selama bertahun-tahun, menjalankan tugas-tugas latar belakang di Android telah berkembang. Untuk menulis aplikasi modern, kita harus mempelajari cara menjalankan tugas latar belakang dengan gaya modern.

Kapan aplikasi berada di latar belakang?

Sebelum memahami apa itu eksekusi latar belakang, kita harus memiliki pandangan yang jelas tentang bagaimana Android memahami aplikasi berada di latar depan. Aplikasi dianggap berada di latar depan jika salah satu dari pernyataan berikut terpenuhi:
Jika tidak satu pun dari ketentuan ini yang terpenuhi, aplikasi akan dianggap berada di latar belakang.

Perubahan eksekusi latar belakang

Menjalankan tugas di latar belakang menghabiskan sumber daya perangkat yang terbatas, seperti RAM dan baterai. Hal ini mungkin mengakibatkan pengalaman pengguna yang buruk. Misalnya, tugas latar belakang dapat menurunkan masa pakai baterai perangkat atau pengguna mungkin mengalami kinerja perangkat yang buruk saat menonton video, bermain game, dan menggunakan kamera.
Untuk meningkatkan masa pakai baterai dan memberikan pengalaman pengguna yang lebih baik, Android telah berkembang selama beberapa rilis untuk menetapkan batas eksekusi latar belakang. Batasan ini meliputi:

Kasus penggunaan dan solusi

Memutuskan fitur mana yang akan digunakan untuk mengimplementasikan eksekusi latar belakang mengharuskan developer untuk memiliki pemahaman yang jelas mengenai apa yang ingin mereka capai, dan dalam batasan apa. Diagram alir ini bisa membantu Anda membuat keputusan:

  • WorkManager adalah solusi yang disarankan untuk eksekusi latar belakang, dengan mempertimbangkan semua batasan eksekusi latar belakang OS. Jika Anda perlu menjamin bahwa tugas akan berjalan bahkan ketika ditunda, Anda harus menggunakan WorkManager. API ini memungkinkan Anda menjadwalkan tugas (satu kali atau berulang) serta menggabungkan dan menyatukan tugas. Anda juga bisa menerapkan batasan eksekusi ke sini seperti memicu ketika perangkat sedang tidak aktif atau mengisi daya, atau mengeksekusi ketika penyedia konten berubah. Salah satu contohnya adalah bila Anda perlu mengompresi log untuk menguploadnya ke server Anda. Untuk melakukannya, Anda bisa membuat dua permintaan kerja:
    • Pertama: kompresikan file. Pada langkah ini Anda bisa menambahkan suatu batasan sehingga perangkat harus mengisi daya.
    • Kedua: upload ke server. Untuk permintaan ini Anda harus menambahkan batasan konektivitas jaringan sehingga pekerjaan hanya terpicu ketika Anda memiliki koneksi yang valid.
    Setelah mengantre kedua tugas, WorkManager akan berhati-hati mengeksekusi mereka ketika aplikasi Anda memiliki akses ke sumber daya yang dibutuhkan.
    Fitur lain yang menarik dari WorkManager adalah bahwa ia mematuhi fitur manajemen-daya, sehingga jika tugas dijadwalkan untuk berjalan pada waktu yang sudah ditentukan dan perangkat berada dalam mode Istirahatkan pada waktu itu, WorkManager akan mencoba menjalankan tugas selama jendela pemeliharaan jika batasan terpenuhi atau setelah Istirahatkan dicabut.
  • Jika tugas yang berjalan lama dijadwalkan sebagai respons terhadap event eksternal seperti menyinkronkan konten online baru, gunakan Firebase Cloud Messaging untuk memberi tahu aplikasi Anda dan kemudian membuat permintaan kerja dengan WorkManager untuk menyinkronkan konten. Anda bisa mempelajari lebih lanjut tentang hal ini di "Notifying your users with FCM".
  • Jika aplikasi perlu menyelesaikan tugas yang dimulai pengguna tanpa menunda meskipun pengguna meninggalkan aplikasi atau mematikan layar, seperti ketika navigasi atau memutar musik/video, Anda harus menggunakan Layanan Latar Depan. (Entri blog berikutnya dalam seri ini akan lebih mendalami kasus penggunaan ini.)
  • Jika Anda perlu menjalankan tugas pada waktu yang tepat yang memicu tindakan, melibatkan interaksi pengguna, dan tidak bisa ditunda, gunakan AlarmManager (lebih spesifik lagi metode setExactAndAllowWhileIdle). Contoh-contoh alarm waktu meliputi:
    • pengingat minum obat
    • notifikasi bahwa acara TV akan dimulai.
    Ketika alarm terpicu, Anda memiliki beberapa detik untuk menyelesaikan pekerjaan dan aplikasi Anda mungkin tidak memiliki akses ke jaringan (misalnya selama Istirahatkan atau karena Bucket Aplikasi Standby). Jika Anda benar-benar membutuhkan jaringan atau perlu melakukan tugas yang lama, gunakan WorkManager. Setiap kali alarm bangun terpicu, perangkat keluar dari mode daya-rendah dan menahan jam bangun parsial yang bisa secara signifikan memengaruhi masa pakai baterai dari waktu ke waktu. Ini bisa dimonitor melalui statistik alarm bangun eksesif yang ditandai pada Android Vitals, yang disediakan melalui Konsol Google Play.
Rangkuman:
Kasus Penggunaan Contoh Solusi
Jaminan eksekusi dari pekerjaan yang dapat ditangguhkan
  • Mengupload log ke server Anda
  • Mengenkripsi/Mendekripsi konten untuk upload/download
WorkManager
Tugas dimulai sebagai respons terhadap event eksternal
  • Menyinkronkan konten online baru seperti email
FCM + WorkManager
Melanjutkan pekerjaan yang dimulai pengguna yang harus segera dijalankan bahkan bila pengguna meninggalkan aplikasi
  • Pemutar musik
  • Melacak aktivitas
  • Navigasi transit
Layanan Latar Depan
Memicu tindakan yang melibatkan interaksi pengguna, seperti notifikasi pada waktu yang tepat.
  • Jam alarm
  • Pengingat obat
  • Notifikasi tentang acara TV akan dimulai
AlarmManager
Gunakan eksekusi latar belakang dengan bijaksana sehingga Anda bisa mem-build aplikasi keren yang memesona pengguna sembari menghemat baterai mereka. Jika Anda memerlukan informasi selengkapnya tentang mengeksekusi tugas latar belakang di Android, ada konten yang sangat bagus di situs developer Android.
Catatan: WorkManager masih dalam pratinjau publik. Jika Anda memerlukan solusi alternatif sekarang, Anda harus menggunakan JobScheduler, meskipun ini memiliki batasan yang tidak berlaku untuk WorkManager. JobScheduler adalah bagian dari Android Framework, dan hanya tersedia untuk Android API 21 ke atas; WorkManager berfungsi pada API 14 ke atas.
Ucapan Terima Kasih: Seri entri blog ini bisa diproduksi berkat kolaborasi tim DevRel dan Android Framework