Background Execution — mekanisme eksekusi kode aplikasi mobile saat aplikasi tidak berada di latar depan. Tanpa mekanisme ini, aplikasi akan dihentikan oleh sistem saat diminimalkan. Menurut Apple, 2026, iOS membatasi waktu latar belakang hingga 30 detik, sedangkan Android memungkinkan skenario yang lebih fleksibel melalui WorkManager dan Foreground Service.
Utama
Background Execution — kemampuan aplikasi untuk melanjutkan eksekusi kode setelah pengguna meminimalkannya atau beralih ke aplikasi lain. Tanpa mekanisme khusus, OS mobile mengalihkan aplikasi ke status Suspended (ditangguhkan) dalam beberapa detik setelah masuk ke latar belakang, membebaskan prosesor dan memori untuk aplikasi aktif.
Aplikasi mobile melewati beberapa status siklus hidup: Foreground (aktif), Background (latar belakang), Suspended (ditangguhkan) dan Terminated (diakhiri). Background — satu-satunya status di mana aplikasi dapat mengeksekusi kode tanpa antarmuka yang terlihat. iOS dan Android menentukan durasi dan operasi yang diizinkan secara berbeda dalam status ini.
Eksekusi latar belakang diperlukan untuk tugas sinkronisasi data, unduh konten, pemrosesan notifikasi Push, geolokasi di latar belakang dan pemutaran audio. Sinkronisasi — skenario paling umum: aplikasi mengirim data ke server atau mengunduh pembaruan tanpa partisipasi pengguna.
Batasan eksekusi latar belakang disebabkan oleh tiga faktor: konsumsi daya, kinerja perangkat dan privasi pengguna. Prosesor dan modul radio (Wi-Fi, data seluler) mengonsumsi daya paling banyak — setiap proses latar belakang memperpendek masa pakai baterai.
Penelitian Google menunjukkan bahwa aplikasi yang menjalankan tugas latar belakang setiap 5 minutes memperpendek masa pakai baterai perangkat sebesar 20–30% per hari. Bahkan operasi latar belakang yang dioptimalkan dengan frekuensi satu kali per jam memiliki dampak yang nyata jika ada lebih dari dua aplikasi semacam itu.
Setiap aplikasi latar belakang memenuhi memori RAM. Saat memori tidak mencukupi, sistem membongkar aplikasi dari memori, yang menyebabkan restart saat pengguna kembali. iOS menggunakan algoritma Jetsam — mekanisme penghentian paksa proses latar belakang saat melebihi batas memori. Android menggunakan LMK (Low Memory Killer) dengan prinsip serupa.
Mulai Android 10 dan iOS 13, sistem meminta aplikasi untuk mendeklarasikan tujuan kerja latar belakang. Android membatasi peluncuran Broadcast Receiver di latar belakang. iOS memerlukan penentuan Background Mode di Capabilities proyek. Pengguna dapat menonaktifkan eksekusi latar belakang untuk aplikasi apa pun di pengaturan.
| OS | Versi | Batasan | Dampak |
|---|---|---|---|
| Android | 8.0 | IMPLICIT_BROADCAST dilarang | 67% Broadcast latar belakang rusak |
| Android | 9.0 | Doze ditingkatkan | Pembatasan panggilan jaringan |
| Android | 12+ | Foreground Service dibatasi | Larangan peluncuran dari latar belakang |
| iOS | 7+ | Background App Refresh | Jendela pembaruan berkala |
| iOS | 13+ | BGTaskScheduler | Perencanaan alih-alih eksekusi |
Android menyediakan beberapa mekanisme untuk eksekusi latar belakang, masing-masing menyelesaikan kategori tugasnya sendiri. WorkManager — API yang direkomendasikan untuk tugas yang ditunda dan berkala. Foreground Service — untuk eksekusi segera dengan notifikasi yang terlihat. JobScheduler — analog tingkat rendah dari WorkManager.
WorkManager — bagian dari Android Jetpack, memastikan eksekusi tugas latar belakang dengan jaminan penyelesaian bahkan setelah perangkat di-restart. API memilih waktu eksekusi optimal dengan mempertimbangkan status jaringan, level baterai dan mode Doze. WorkManager kompatibel dengan API 14+ dan menggantikan AlarmManager serta JobScheduler yang sudah usang.
Ketika aplikasi perlu menjalankan tugas yang terlihat oleh pengguna (memutar musik, merekam geolokasi), digunakan Foreground Service. Layanan menampilkan notifikasi permanen di bilah status dan memiliki prioritas lebih tinggi — sistem tidak akan menghentikannya hingga tugas selesai. Mulai Android 13, izin POST_NOTIFICATIONS diperlukan.
Mulai Android 6.0, perangkat masuk ke mode Doze saat tidak aktif. Dalam mode ini, operasi jaringan, sinkronisasi dan JobScheduler ditunda. WorkManager secara otomatis beradaptasi dengan Doze — tugas dijalankan di Maintenance Window terdekat saat perangkat keluar dari tidur untuk pemeliharaan.
iOS menggunakan pendekatan yang lebih ketat terhadap eksekusi latar belakang. Background App Refresh — mekanisme utama pembaruan data berkala. BGTaskScheduler — API untuk perencanaan tugas dengan mempertimbangkan status sistem. Untuk operasi panjang, tersedia Background Modes: audio, location, voip, fetch dan processing.
Background App Refresh memungkinkan aplikasi untuk bangun setiap 15–30 menit untuk sinkronisasi data. Waktu bangun tergantung pada perilaku pengguna — sistem menganalisis seberapa sering ia membuka aplikasi. Pengguna dapat menonaktifkan fungsi ini untuk aplikasi individual di Settings — General — Background App Refresh.
Mulai iOS 13, BGTaskScheduler menggantikan performFetch dan beginBackgroundTask yang sudah usang. Aplikasi mendaftarkan tugas dengan identifier dan interval minimum, dan sistem sendiri menentukan waktu eksekusi optimal. Tugas dibagi menjadi dua jenis: BGProcessingTask (panjang, 10+ menit) dan BGAppRefreshTask (pendek, hingga 30 detik).
iOS mengalokasikan waktu terbatas untuk aplikasi menjalankan tugas latar belakang — hingga 30 detik untuk BGAppRefreshTask dan hingga 10 menit untuk BGProcessingTask. Setelah batas terlampaui, sistem secara paksa menghentikan tugas. Pengembang harus memanggil expiration handler untuk menyimpan hasil sementara.
Mari kita lihat implementasi praktis eksekusi latar belakang di Android menggunakan WorkManager. Contoh sinkronisasi data setiap 8 jam dengan mempertimbangkan status jaringan. WorkManager menjamin eksekusi tugas bahkan setelah perangkat di-restart.
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
return try {
syncDataToServer()
Log.d("Sync", "Data tersinkronisasi")
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Menjalankan tugas periodik setiap 8 jam
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresCharging(false)
.build()
val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
8, TimeUnit.HOURS
).setConstraints(constraints).build()
WorkManager.getInstance(context).enqueue(syncRequest)
Untuk operasi panjang yang terlihat oleh pengguna, gunakan Foreground Service. Contoh mengunduh file dengan progres di notifikasi. Layanan memanggil startForeground() dengan notifikasi yang tidak dapat diabaikan. Setelah unduhan selesai — stopForeground(STOP_FOREGROUND_REMOVE).
class DownloadService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, id: Int): Int {
startForeground(NOTIFICATION_ID, createNotification())
downloadFile()
stopForeground(STOP_FOREGROUND_REMOVE)
stopSelf()
return START_NOT_STICKY
}
private fun createNotification(): Notification {
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Mengunduh file")
.setSmallIcon(android.R.drawable.ic_download)
.build()
}
}
Di iOS, eksekusi latar belakang dikonfigurasi melalui BGTaskScheduler. Contoh pendaftaran dan eksekusi tugas pembaruan konten. Aplikasi harus mendaftarkan identifier tugas di Info.plist dan memanggil submit saat tugas harus dijadwalkan.
import BackgroundTasks
func registerBackgroundTask() {
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.app.refresh",
using: nil
) { task in
self.handleAppRefresh(task: task as! BGAppRefreshTask)
}
}
func scheduleAppRefresh() {
let request = BGAppRefreshTaskRequest(
identifier: "com.app.refresh"
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)
}
func handleAppRefresh(task: BGAppRefreshTask) {
scheduleAppRefresh()
task.expirationHandler = {
// Simpan data sementara
cacheCurrentState()
}
fetchLatestData {
task.setTaskCompleted(success: true)
}
}
Untuk operasi panjang (membersihkan cache, memproses data) gunakan BGProcessingTask. Sistem memberikan hingga 10 menit untuk eksekusi. Hanya dijalankan saat perangkat diisi daya dan terhubung ke Wi-Fi. Memerlukan identifier terpisah di Info.plist dan pendaftaran melalui register(forTaskWithIdentifier:).
func scheduleProcessing() {
let request = BGProcessingTaskRequest(
identifier: "com.app.cleanup"
)
request.requiresExternalPower = true
request.requiresNetworkConnectivity = true
request.earliestBeginDate = Date(timeIntervalSinceNow: 24 * 60 * 60)
try? BGTaskScheduler.shared.submit(request)
}
Android dan iOS sangat berbeda dalam filosofi eksekusi latar belakang. Android menyediakan alat yang fleksibel dengan kontrol yang besar, tetapi membutuhkan pengembang untuk memilih API yang tepat. iOS membatasi kemampuan, tetapi menjamin kinerja yang stabil dan otonomi bagi pengguna.
| Kriteria | Android | iOS |
|---|---|---|
| API yang direkomendasikan | WorkManager | BGTaskScheduler |
| Waktu maks. tugas | Tidak terbatas (Foreground Service) | 30 detik / 10 menit (processing) |
| Tugas berkala | Ya, melalui PeriodicWorkRequest | Ya, melalui BGAppRefreshTask |
| Jaminan eksekusi | Ya, bahkan setelah restart | Tidak — sistem memutuskan kapan |
| Akses jaringan di latar belakang | Dibatasi oleh mode Doze | Melalui URLSession dengan background config |
| Geolokasi di latar belakang | Foreground Service + izin | Background Mode location + NSLocation |
| Audio di latar belakang | Foreground Service dengan notifikasi media | Background Mode audio + AVAudioSession |
WorkManager optimal untuk tugas yang harus dijalankan terlepas dari status aplikasi: sinkronisasi data, pengiriman analytics, pemrosesan antrian. API menjamin eksekusi bahkan setelah perangkat dimatikan — tugas dijadwalkan ulang setelah boot.
BGTaskScheduler cocok untuk tugas yang dapat dijalankan sistem kapan saja: mengunduh konten baru, memperbarui widget, membersihkan cache. Tidak cocok untuk operasi mendesak — sistem menunda tugas jika perangkat dalam mode Doze atau baterai rendah.
Pertanyaan yang sering diajukan
Background Execution — konsep umum yang menggambarkan kode apa pun yang dijalankan di latar belakang. Background Modes — mekanisme khusus iOS yang memungkinkan aplikasi menjalankan jenis operasi latar belakang tertentu: audio, geolokasi, VoIP, fetch. Android menggunakan pendekatan serupa melalui jenis-jenis Foreground Service.
Di iOS ini adalah batasan standar untuk BGAppRefreshTask. Sistem secara paksa menghentikan tugas setelah batas terlampaui. Di Android situasi serupa terjadi ketika aplikasi tidak menggunakan WorkManager atau Foreground Service — Service biasa dihentikan oleh sistem setelah masuk ke latar belakang.
Di Android gunakan WorkManager — menjamin eksekusi bahkan setelah restart. Di iOS eksekusi tidak dapat dijamin — sistem sendiri memutuskan kapan akan menjalankan tugas. Satu-satunya cara untuk menjaminnya — menggunakan Background Modes (audio, location) dengan indikator yang terlihat bagi pengguna.
Di iOS panggil UIApplication.shared.backgroundRefreshStatus — status .available, .denied atau .restricted. Di Android gunakan PowerManager.isIgnoringBatteryOptimizations() untuk memeriksa pengecualian dari optimasi baterai. Untuk WorkManager pemeriksaan tidak diperlukan — API menangani sendiri batasan sistem.
Notifikasi Push — mekanisme utama untuk memicu tindakan tanpa kode latar belakang. Di iOS tersedia PushKit untuk VoIP dan Silent Push untuk pembaruan data. Di Android — High Priority FCM dan Notification Trampoline. WebSockets melalui Foreground Service — alternatif untuk aplikasi real-time.
Kesimpulan
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.
Baca juga