Bergabunglah bersama kami di ⁠#Android11: The Beta Launch Show pada tanggal 3 Juni!

Panduan pemrosesan latar belakang

Setiap aplikasi Android memiliki thread utama yang bertugas untuk menangani UI (termasuk mengukur dan menggambar tampilan), dengan mengoordinasikan interaksi pengguna, serta menerima peristiwa siklus proses. Jika terlalu banyak pekerjaan yang dilakukan di thread ini, aplikasi akan mengalami hang atau melambat, yang berakibat pada pengalaman pengguna yang tidak diinginkan. Setiap komputasi dan operasi yang berjalan lama seperti mendekode bitmap, mengakses disk, atau melakukan permintaan jaringan, harus dilakukan pada thread latar belakang yang terpisah. Secara umum, pekerjaan apa pun yang membutuhkan waktu lebih dari beberapa milidetik akan dialihkan ke thread latar belakang. Beberapa tugas ini mungkin perlu dilakukan saat pengguna sedang berinteraksi secara aktif dengan aplikasi. Untuk mempelajari cara menjalankan tugas pada thread latar belakang dan di luar UI thread utama saat aplikasi sedang digunakan secara aktif, lihat panduan solusi threading.

Aplikasi mungkin juga perlu menjalankan beberapa tugas meski pengguna tidak menggunakan aplikasi secara aktif, misalnya melakukan sinkronisasi secara berkala dengan server backend atau mengambil konten baru dalam aplikasi secara berkala. Aplikasi juga dapat mengharuskan layanan untuk langsung dijalankan hingga selesai, bahkan setelah pengguna selesai berinteraksi dengan aplikasi. Panduan ini akan membantu Anda mempelajari solusi mana yang paling sesuai dengan kebutuhan Anda untuk kasus penggunaan ini.

Tantangan dalam pemrosesan latar belakang

Tugas latar belakang menggunakan resource perangkat yang terbatas, seperti RAM dan baterai. Hal ini akan memberikan pengalaman yang buruk bagi pengguna jika tidak ditangani dengan benar.

Agar dapat memaksimalkan baterai dan memastikan perilaku aplikasi yang baik, Android membatasi pekerjaan latar belakang saat aplikasi (atau notifikasi layanan latar depan) tidak terlihat oleh pengguna.

  • Android 6.0 (API level 23) memperkenalkan mode Istirahatkan dan aplikasi standby. Mode Istirahatkan membatasi perilaku aplikasi saat layar nonaktif dan saat perangkat sedang dalam mode standby. Aplikasi standby menempatkan aplikasi yang tidak digunakan dalam status khusus yang akan membatasi akses jaringan, tugas, dan sinkronisasi dari aplikasi.
  • Android 7.0 (API level 24) membatasi siaran implisit dan memperkenalkan Istirahatkan Kapan Saja.
  • Android 8.0 (API level 26) selanjutnya membatasi perilaku latar belakang yang terbatas, seperti mendapatkan lokasi di latar belakang dan menghapus wakelock dalam cache.
  • Android 9 (API level 28) memperkenalkan Bucket Aplikasi Standby, di mana permintaan aplikasi untuk resource diprioritaskan secara dinamis berdasarkan pola penggunaan aplikasi.

Penting untuk memahami kebutuhan tugas Anda dan memilih solusi yang tepat untuk mematuhi praktik terbaik sistem dalam menjadwalkan tugas latar belakang Anda.

Memilih solusi yang tepat untuk tugas Anda

  • Apakah tugas dapat ditangguhkan, atau perlu dilakukan secara langsung? Misalnya, jika Anda perlu mengambil beberapa data dari jaringan sebagai respons terhadap pengguna yang mengklik tombol, pekerjaan tersebut harus segera dilakukan. Namun, jika Anda ingin mengupload log ke server, pekerjaan tersebut dapat ditangguhkan tanpa memengaruhi performa aplikasi atau harapan pengguna.

  • Apakah pekerjaan bergantung pada kondisi sistem? Anda mungkin ingin tugas Anda berjalan hanya saat perangkat memenuhi ketentuan tertentu, seperti terhubung ke daya, memiliki konektivitas internet, dan sebagainya. Misalnya, aplikasi Anda mungkin perlu mengompresi data yang disimpan secara berkala. Agar tidak memengaruhi pengguna, Anda tentu ingin tugas tersebut hanya terjadi saat perangkat mengisi daya dan tidak ada aktivitas.

  • Apakah tugas harus dijalankan pada waktu yang tepat? Aplikasi kalender memungkinkan pengguna menyiapkan pengingat untuk acara pada waktu tertentu. Pengguna mengharapkan untuk melihat notifikasi pengingat pada waktu yang tepat. Dalam kasus lain, aplikasi mungkin mengabaikan menjalankan tugas pada waktu yang tepat. Aplikasi mungkin memiliki persyaratan umum—seperti, "Pekerjaan A harus dijalankan terlebih dahulu, lalu Pekerjaan B, selanjutnya Pekerjaan C"—tetapi aplikasi tidak mengharuskan tugas untuk dijalankan pada waktu tertentu.

Gambar 1. Apa cara terbaik untuk melakukan pekerjaan latar belakang?

WorkManager

Untuk pekerjaan yang dapat ditangguhkan dan diharapkan berjalan meskipun perangkat atau aplikasi dimulai ulang, gunakan WorkManager. WorkManager adalah library Android yang menjalankan dengan baik pekerjaan latar belakang yang dapat ditangguhkan saat kondisi pekerjaan (seperti ketersediaan jaringan dan daya) terpenuhi.

WorkManager menawarkan API kompatibilitas mundur (API level 14+) yang memanfaatkan JobScheduler API (API level 23+) dan yang lebih tinggi untuk membantu mengoptimalkan masa pakai baterai dan tugas batch serta kombinasi dari AlarmManager & BroadcastReceiver pada versi perangkat yang lebih rendah.

Layanan latar depan

Untuk pekerjaan yang dimulai oleh pengguna yang harus segera dijalankan dan harus dijalankan hingga selesai, gunakan layanan latar depan. Menggunakan layanan latar depan akan memberi tahu sistem bahwa aplikasi melakukan pekerjaan penting dan seharusnya tidak boleh dihentikan. Layanan latar depan dapat dilihat oleh pengguna melalui notifikasi yang tidak dapat ditutup pada tray notifikasi.

AlarmManager

Jika Anda perlu menjalankan tugas pada waktu yang tepat, gunakan AlarmManager. AlarmManager meluncurkan aplikasi Anda, jika perlu, untuk melakukan tugas pada waktu yang ditentukan. Namun, jika tugas Anda tidak perlu dijalankan pada waktu yang tepat, WorkManager adalah opsi yang lebih baik; WorkManager lebih mampu menyeimbangkan resource sistem. Misalnya, jika Anda perlu menjalankan tugas setiap jam atau lebih, tetapi tidak perlu menjalankan tugas pada waktu tertentu, Anda harus menggunakan WorkManager untuk menyiapkan tugas berulang.

DownloadManager

Jika aplikasi Anda menjalankan download HTTP yang berjalan lama, pertimbangkan untuk menggunakan DownloadManager. Klien dapat meminta agar URI didownload ke file tujuan tertentu yang mungkin berada di luar proses aplikasi. Pengelola download akan menjalankan proses download di latar belakang, menangani interaksi HTTP, dan mencoba mendownload kembali setelah mengalami kegagalan atau saat melewati perubahan konektivitas dan reboot.