Memuat data, sinkronisasi konten, mengirim analitik — banyak tugas tidak memerlukan partisipasi aktif pengguna. Namun, perangkat seluler membatasi pekerjaan latar belakang untuk menghemat baterai dan menjaga kinerja. Tugas latar belakang (background tasks) adalah mekanisme yang memungkinkan aplikasi menjalankan kode saat pengguna tidak melihatnya. Dalam artikel ini kita akan membahas WorkManager, BGTaskScheduler, Foreground Service, dan fitur Doze Mode. Detail lebih lanjut di dokumentasi resmi WorkManager.
Poin Penting
Tugas latar belakang adalah kode apa pun yang berjalan saat aplikasi tidak di latar depan (layar aktif). Ini dapat mencakup: sinkronisasi data berkala dengan server, mengunduh file besar, memproses notifikasi push, pelacakan geolokasi, memperbarui widget. Setiap platform memiliki batasannya sendiri untuk pekerjaan latar belakang: iOS lebih ketat (10–30 menit waktu latar belakang), Android lebih longgar tetapi telah memperketat aturan sejak versi 9.
Arsitektur tugas latar belakang dibangun di atas tiga tingkat: (1) tugas segera — dijalankan sekarang (Foreground Service); (2) tugas ditunda — dijalankan dalam kondisi yang sesuai (WorkManager, BGTaskScheduler); (3) tugas berkala — diulang dengan interval yang ditentukan. Memilih tingkat yang tepat menentukan apakah tugas akan selesai tepat waktu dan apakah akan menyebabkan penolakan aplikasi oleh toko.
Di kedua platform, Google/Apple sangat merekomendasikan penggunaan API deklaratif daripada mengelola thread secara langsung di latar belakang. WorkManager di Android dan BGTaskScheduler di iOS memungkinkan sistem mendistribusikan pekerjaan latar belakang secara optimal antar aplikasi, mengelompokkan tugas untuk menghemat energi. Di IT Sectr, kami selalu memulai desain arsitektur latar belakang dengan menganalisis persyaratan frekuensi dan urgensi pembaruan.
iOS menyediakan beberapa mekanisme untuk pekerjaan latar belakang. Background Fetch — pembaruan konten berkala dengan interval yang ditentukan oleh sistem (bukan pengembang). Aplikasi mendapat jendela ~30 detik untuk mengunduh data baru. Background Fetch diaktifkan melalui Capabilities → Background Modes → Background Fetch dan diimplementasikan di AppDelegate: application(_:performFetchWithCompletionHandler:).
BGTaskScheduler adalah API modern untuk iOS 13+, yang menggantikan Background Fetch. Pengembang mendaftarkan tugas dengan pengenal, dan sistem menjalankannya saat kondisi sesuai. BGAppRefreshTask — untuk pembaruan konten pendek; BGProcessingTask — untuk tugas panjang (membersihkan cache, sinkronisasi basis data). Tugas didaftarkan saat aplikasi diluncurkan, dan sistem menjadwalkan eksekusinya dengan mempertimbangkan status baterai, jaringan, dan aktivitas pengguna.
Background Modes — daftar mode yang mengizinkan pekerjaan latar belakang untuk skenario tertentu: Audio (pemutaran latar belakang), Location (pelacakan GPS), VoIP (panggilan melalui PushKit), BLE (koneksi ke perangkat Bluetooth), Processing (tugas panjang melalui BGTaskScheduler). Setiap mode memerlukan justifikasi selama peninjauan App Store. Menggunakan mode tanpa kebutuhan nyata adalah penyebab umum penolakan aplikasi.
Significant Location Change — mekanisme untuk aplikasi yang tidak memerlukan geolokasi konstan tetapi perlu tahu tentang pergerakan signifikan pengguna (lebih dari 500 meter). Sistem membangunkan aplikasi saat menara seluler berubah. Mekanisme ini menghemat baterai secara signifikan dibandingkan pelacakan GPS konstan.
Android menawarkan kumpulan API terkaya untuk tugas latar belakang, tetapi sejak versi 8.0 (API 26) aturan menjadi lebih ketat. WorkManager adalah solusi yang direkomendasikan Google untuk semua jenis tugas latar belakang. WorkManager menjamin eksekusi tugas bahkan setelah perangkat di-restart (melalui BootReceiver) dan mendukung rantai tugas, LiveData/Flow yang dapat diamati, dan kompatibilitas mundur hingga API 14.
WorkManager menggunakan Worker — kelas dasar dengan metode doWork(). Constraints menentukan kondisi eksekusi: NetworkType.CONNECTED, BatteryNotLow, StorageNotLow. PeriodicWorkRequest — untuk tugas berkala dengan interval minimal 15 menit. WorkManager secara otomatis beradaptasi dengan Doze Mode dan App Standby, mengelompokkan tugas ke dalam jendela pemeliharaan. Contoh Worker sederhana:
class SyncWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
return try {
val repository =
Injection.provideRepository(applicationContext)
repository.syncData()
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Запланировать задачу
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(constraints)
.build()
WorkManager.getInstance(context)
.enqueue(syncRequest)
JobScheduler — API yang lebih lama (Android 5+, API 21). Menjadwalkan tugas dengan kondisi yang ditentukan (jaringan, pengisian daya, diam). Keterbatasan: tidak mendukung restart perangkat (memerlukan BootReceiver) dan tidak memiliki status yang dapat diamati. JobScheduler cocok untuk tugas sederhana di proyek lama; untuk proyek baru, gunakan WorkManager.
Foreground Service — layanan yang dilihat pengguna melalui notifikasi persisten (ongoing notification). Digunakan untuk: pemutaran musik, pelacakan GPS, mengunduh file besar. Foreground Service memiliki prioritas tinggi — sistem tidak akan mematikannya saat memori rendah. Mulai Android 13, izin FOREGROUND_SERVICE_SPECIAL_USE diperlukan untuk beberapa jenis. Alternatifnya adalah WorkManager dengan ForegroundServiceOption (tugas panjang).
AlarmManager — untuk tugas yang harus berjalan pada waktu yang tepat (alarm, pengingat). AlarmManager dapat membangunkan perangkat dari Doze Mode (setAlarmClock). Tidak direkomendasikan untuk sinkronisasi reguler karena konsumsi daya tinggi. Untuk tugas berkala, gunakan WorkManager, dan AlarmManager hanya saat waktu yang tepat sangat penting.
| Skenario | iOS | Android |
|---|---|---|
| Pembaruan konten berkala | BGAppRefreshTask (BGTaskScheduler) | WorkManager (PeriodicWorkRequest) |
| Tugas latar belakang panjang | BGProcessingTask | WorkManager + ForegroundService |
| Pemutaran audio | Background Audio Mode | Foreground Service |
| Pelacakan GPS | Significant Location Change / Background Location | Foreground Service + FusedLocationProvider |
| VoIP / Panggilan | PushKit + CallKit | ConnectionService + Foreground Service |
| Waktu tepat (alarm) | UNNotificationRequest (calendar) | AlarmManager |
| Pemrosesan push (latar belakang) | Notification Service Extension | FirebaseMessagingService (onMessageReceived) |
Doze Mode adalah mode hemat daya di Android yang memengaruhi eksekusi tugas latar belakang. Diperkenalkan di Android 6.0 (API 23). Saat perangkat tidak diisi daya, layar mati, dan perangkat diam, Doze Mode memblokir permintaan jaringan, menunda JobScheduler dan WakeLock. Secara berkala, Doze membuka jendela pemeliharaan — interval pendek saat aplikasi dapat menjalankan tugas yang ditunda. Sejak Android 7.0 (API 24), Doze aktif saat layar mati, tidak hanya saat benar-benar diam.
App Standby — mode di mana aplikasi yang tidak digunakan dialihkan ke siaga. Jika aplikasi tidak memiliki notifikasi aktif dan tidak dibuka selama beberapa hari, aplikasi ditempatkan ke Standby Bucket: aktif (active), working, frequent, rare. Semakin jarang aplikasi digunakan, semakin ketat pembatasannya: permintaan jaringan ditunda, sinkronisasi diblokir, JobScheduler tidak berjalan.
WakeLock — mekanisme yang menjaga perangkat tetap terjaga (mencegahnya tidur). Digunakan untuk menyelesaikan operasi penting. WakeLock harus dilepaskan (release) setelah tugas selesai, jika tidak baterai akan habis dalam beberapa jam. WakeLock tidak berfungsi di Doze Mode — sistem mengabaikannya. Bekerja dengan WakeLock di Android 8+ memerlukan izin WAKE_LOCK dan manajemen siklus hidup yang tepat.
Di IT Sectr, kami mempertimbangkan Doze Mode dan App Standby pada tahap desain. WorkManager secara otomatis menangani mode ini, tetapi untuk Foreground Service perlu direncanakan penanganan transisi ke Doze yang benar. Disarankan untuk menguji pekerjaan latar belakang pada perangkat nyata dengan mode hemat daya diaktifkan dan setelah periode idle yang panjang.
Saat mendesain tugas latar belakang, ikuti tips berikut. 1. Selalu gunakan WorkManager untuk proyek Android baru. Ini memecahkan masalah kompatibilitas, Doze Mode, dan restart perangkat. 2. Di iOS, preferensikan BGTaskScheduler daripada Background Fetch untuk iOS 13+. 3. Gunakan Foreground Service hanya saat tugas benar-benar memerlukan notifikasi yang terlihat. 4. Jangan menyalahgunakan WakeLock — ini menghabiskan baterai dan dapat menyebabkan penolakan aplikasi. 5. Uji tugas latar belakang di Doze Mode: adb shell dumpsys deviceidle force-idle. 6. Selalu verifikasi penyelesaian tugas melalui pencatatan dan analitik. 7. Ingat batasannya: iOS memberikan ~30 detik untuk Background Fetch dan ~beberapa menit untuk BGProcessingTask. Android WorkManager tidak menjamin waktu eksekusi yang tepat.
Pertanyaan yang sering diajukan
Background Service berjalan tanpa notifikasi yang terlihat dan dapat dimatikan oleh sistem kapan saja. Foreground Service harus menampilkan notifikasi persisten (ongoing notification) dan memiliki prioritas lebih tinggi. Foreground Service digunakan untuk pemutaran musik dan pelacakan GPS.
Doze Mode adalah mode hemat daya Android yang menonaktifkan akses jaringan dan menunda JobScheduler/WakeLock saat perangkat tidak digunakan. WorkManager beradaptasi dengan Doze Mode secara otomatis.
Di iOS, tugas latar belakang dijalankan melalui Background Fetch (pembaruan berkala), BGTaskScheduler (tugas ditunda) atau Background Modes (audio, VoIP, BLE, lokasi). BGTaskScheduler adalah API modern untuk iOS 13+, yang menggantikan Background Fetch.
WorkManager adalah solusi yang direkomendasikan Google untuk semua tugas latar belakang di Android. JobScheduler adalah API yang lebih lama dengan kemampuan terbatas. WorkManager mendukung rantai tugas, LiveData/Flow yang dapat diamati, dan kompatibilitas mundur hingga API 14.
App Standby adalah mode Android di mana aplikasi yang tidak digunakan dimasukkan ke status siaga: permintaan jaringan ditunda, sinkronisasi dijeda. Jika aplikasi tidak digunakan selama beberapa hari, Android menempatkannya ke Standby Bucket (active, working, frequent, rare).
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.