Foreground Service — adalah layanan Android yang menjalankan operasi jangka panjang di hadapan pengguna dengan notifikasi wajib di status bar. Berbeda dengan Background Service yang dapat dihentikan sistem saat kekurangan sumber daya, Foreground Service menerima prioritas tinggi dan terus bekerja bahkan dalam kondisi memori terbatas. Menurut dokumentasi Android Developers, 2025, Foreground Service tetap menjadi satu-satunya cara yang andal untuk menjalankan tugas jangka panjang pada perangkat dengan Android 12 dan yang lebih baru.
Poin utama
Foreground Service — adalah komponen Android yang dirancang untuk menjalankan operasi yang pengguna sadari dan lihat. Ini menampilkan notifikasi permanen di panel notifikasi yang tidak dapat dihapus — tetap aktif selama layanan berjalan. Ini adalah perbedaan utama dari layanan latar belakang yang bekerja tanpa sepengetahuan pengguna.
Sistem Android menganggap Foreground Service sebagai proses yang sangat penting. Saat kekurangan RAM, platform pertama-tama menghentikan Background Service, kemudian Activity yang di-cache, dan hanya dalam kasus luar biasa — Foreground Service. OOM Killer menetapkan layanan semacam itu level ADJ 2, yang secara praktis mengecualikan penghentian paksa.
Untuk menjalankan Foreground Service, pengembang wajib memanggil metode startForeground() dalam beberapa detik setelah membuat layanan, jika tidak sistem akan menghasilkan pengecualian ForegroundServiceDidNotStartInTimeException. Ini adalah persyaratan ketat platform yang diperkenalkan untuk mencegah tugas latar belakang yang tidak dideklarasikan.
Mekanisme Foreground Service diperkenalkan di Android 1.0 bersama dengan SDK pertama, tetapi notifikasi wajib muncul di Android 9 (API 28). Sampai saat itu, layanan dapat bekerja di foreground tanpa indikator yang terlihat oleh pengguna. Mulai dari Android 9, Google memperketat persyaratan: setiap aplikasi yang memanggil startForeground harus memberikan notifikasi dalam 5 detik setelah memulai layanan.
Di Android 12 (API 31) ditambahkan pembatasan untuk menjalankan Foreground Service dari konteks latar belakang — sekarang diperlukan izin FOREGROUND_SERVICE_SPECIAL_USE untuk banyak skenario. Android 14 (API 34) memperkenalkan deklarasi wajib foregroundServiceType di manifest, yang membuat arsitektur layanan lebih transparan dan dapat diprediksi.
Mekanisme kerja Foreground Service didasarkan pada tiga tahap kunci: pembuatan layanan, penempelan notifikasi, dan pelaksanaan tugas. Layanan mewarisi dari kelas Service dan menimpa metode onStartCommand(), di mana startForeground() dipanggil dengan pengidentifikasi dan objek Notification.
Setelah pemanggilan startForeground(), sistem memindahkan proses layanan ke grup foreground dengan prioritas kelangsungan hidup yang lebih tinggi. Ini berarti Android akan berusaha menjaga proses tetap aktif terlepas dari beban memori operasional. Foreground Service tidak dapat dihentikan oleh sistem dalam kondisi normal — hanya dengan menghapus notifikasi oleh pengguna atau pemanggilan eksplisit stopSelf().
Siklus hidup Foreground Service dikelola melalui metode onCreate(), onStartCommand() dan onDestroy(). Di onStartCommand() pengembang menentukan strategi restart layanan setelah proses dimatikan — konstanta START_STICKY memaksa sistem untuk membuat ulang layanan setelah pemulihan sumber daya, dan START_NOT_STICKY mencegah restart otomatis.
Saat menjalankan Foreground Service, langkah-langkah dilakukan secara berurutan: pemanggilan startService(), pembuatan objek Service di onCreate(), pemrosesan Intent di onStartCommand() dan pemanggilan startForeground() dengan objek Notification. Jika layanan sudah berjalan dan Intent baru masuk, hanya onStartCommand() yang dipanggil lagi — metode onCreate() dijalankan satu kali selama masa layanan.
Penghentian Foreground Service terjadi melalui stopForeground() dengan flag REMOVE_NOTIFICATION, yang menyembunyikan notifikasi dari status bar. Segera setelah notifikasi dihapus, sistem dapat berhenti menganggap layanan sebagai foreground dan menurunkan prioritasnya menjadi Background Service, yang membuat proses rentan terhadap penghentian.
PowerManager memainkan peran penting dalam kerja Foreground Service, karena mode hemat energi Android (Doze, App Standby) dapat membatasi kemampuannya untuk menjalankan tugas. Bahkan dalam status foreground, layanan tunduk pada kebijakan baterai — permintaan jaringan dapat ditunda, dan timer disinkronkan dengan jendela Doze. Untuk operasi jangka panjang yang toleran terhadap penundaan, disarankan menggunakan Foreground Service dalam kombinasi dengan WorkManager.
Mulai dari Android 14 (API 34), Google memperkenalkan deklarasi wajib jenis Foreground Service di manifest. Setiap jenis menentukan skenario penggunaan yang diizinkan — sistem memeriksa kesesuaian antara jenis yang dideklarasikan dan perilaku aktual layanan. Total ada 9 jenis, tetapi yang paling sering digunakan adalah sebagai berikut.
Jenis dataSync ditujukan untuk sinkronisasi data antara perangkat dan server, transfer file, dan pencadangan. Contohnya termasuk mengunggah foto ke penyimpanan cloud, sinkronisasi database dengan Firebase, atau mengirim log ke server jarak jauh. Untuk jenis ini, wajib memberikan justifikasi di manifest melalui atribut android:foregroundServiceType="dataSync".
Jenis mediaPlayback digunakan untuk memutar audio dan video di latar belakang — pemutar musik, klien podcast, pemutar video. Ini adalah satu-satunya jenis yang dapat bekerja untuk waktu yang tidak terbatas tanpa campur tangan pengguna. Saluran notifikasi harus memiliki prioritas tinggi dan menampilkan kontrol pemutaran — tombol play, pause, next, prev melalui MediaStyle.
Jenis location ditujukan untuk layanan geolokasi — aplikasi navigasi, pelacakan aktivitas, geozona. Untuk Android 14+ perlu mendeklarasikan izin FOREGROUND_SERVICE_LOCATION dan menyebutkan jenis di manifest. Aplikasi harus memiliki izin aktif untuk akses lokasi di runtime, jika tidak sistem akan menolak menjalankan layanan.
| Jenis | Izin | Contoh penggunaan |
|---|---|---|
| dataSync | FOREGROUND_SERVICE_DATA_SYNC | Sinkronisasi file dengan cloud |
| mediaPlayback | FOREGROUND_SERVICE_MEDIA_PLAYBACK | Pemutar musik di latar belakang |
| location | FOREGROUND_SERVICE_LOCATION | Navigator GPS saat mengemudi |
| camera | FOREGROUND_SERVICE_CAMERA | Aplikasi pengawasan video |
| connectedDevice | FOREGROUND_SERVICE_CONNECTED_DEVICE | Bekerja dengan perangkat BLE |
Perbedaan utama antara Foreground dan Background Service — keberadaan notifikasi yang terlihat dan prioritas kelangsungan hidup. Background Service dapat dihentikan oleh sistem kapan saja saat kekurangan memori, sementara Foreground Service mempertahankan kerja berkat level adj proses yang lebih tinggi dalam mekanisme Low Memory Killer Android.
Background Service tidak memerlukan notifikasi dan dapat bekerja tanpa sepengetahuan pengguna. Namun mulai dari Android 8 (API 26), Google secara signifikan membatasi layanan latar belakang: startService() dari konteks latar belakang tidak berfungsi lagi, dan Context.startForegroundService() menjadi wajib untuk menjalankan layanan apa pun yang berencana pindah ke foreground. Sistem juga memperkenalkan Background Execution Limits — timer (sekarang 10 menit) setelah itu Background Service dihentikan secara paksa.
Foreground Service, sebaliknya, tidak memiliki batasan waktu eksekusi. Layanan dapat bekerja berjam-jam atau berhari-hari — sampai pengguna secara eksplisit menghentikannya atau me-restart perangkat. Ini menjadikan Foreground Service pilihan optimal untuk aplikasi yang memerlukan kerja latar belakang terus-menerus: pemutar musik, pelacak aktivitas, aplikasi panggilan VoIP.
| Parameter | Foreground Service | Background Service |
|---|---|---|
| Notifikasi | Wajib | Tidak diperlukan |
| Waktu hidup | Tanpa batas | Sampai 10 menit (API 26+) |
| Prioritas sistem | Tinggi (ADJ 2) | Rendah (ADJ 8+) |
| API 26+ menjalankan | startForegroundService() | Dilarang dari latar belakang |
Mulai dari Android 12 (API 31), Google memberlakukan pembatasan signifikan untuk menjalankan Foreground Service. Perubahan utama — larangan memanggil startForegroundService() dari konteks latar belakang untuk sebagian besar jenis layanan. Pengecualian hanya untuk kasus di mana pengguna secara eksplisit memberikan persetujuan (misalnya, melalui izin FOREGROUND_SERVICE_SPECIAL_USE) atau layanan dijalankan sebagai respons terhadap niat siaran BOOT_COMPLETED.
Manifest aplikasi dengan target API 34+ harus berisi blok foregroundServiceType untuk setiap layanan yang dideklarasikan. Misalnya, untuk layanan sinkronisasi data disebutkan android:foregroundServiceType="dataSync". Jika jenis tidak disebutkan, sistem menganggap layanan tidak valid dan melempar pengecualian MissingForegroundServiceTypeException saat mencoba menjalankan. Google Play juga memeriksa kesesuaian jenis dan dapat menolak publikasi jika tidak cocok.
Di Android 14 (API 34) setiap jenis Foreground Service memiliki izin terpisah. Pengembang harus mendeklarasikannya di manifest dan memintanya di runtime sebelum menjalankan layanan. Untuk dataSync diperlukan FOREGROUND_SERVICE_DATA_SYNC, untuk mediaPlayback — FOREGROUND_SERVICE_MEDIA_PLAYBACK. Pengguna dapat mencabut izin di pengaturan, yang akan mengakibatkan penghentian layanan aktif.
Google juga memperkenalkan mekanisme Foreground Service Notification Timeout di Android 14: jika layanan tidak memanggil startForeground() dalam 10 detik setelah pembuatan, sistem menghasilkan pengecualian. Pengetatan ini ditujukan untuk memerangi aplikasi yang menunda atau melewatkan panggilan notifikasi, sebenarnya bekerja sebagai Background Service dengan kedok foreground.
Foreground Service digunakan dalam berbagai tugas yang memerlukan eksekusi terjamin di latar belakang. Skenario paling umum termasuk pemutaran media, pelacakan geolokasi, sinkronisasi data, dan bekerja dengan perangkat periferal. Mari kita bahas masing-masing secara detail.
Contoh klasik — pemutar musik yang terus memutar setelah aplikasi diminimalkan. Layanan dimulai dengan notifikasi MediaStyle, tombol kontrol, dan menggunakan jenis mediaPlayback. Pengguna melihat informasi lagu di status bar dan dapat mengontrol pemutaran tanpa membuka aplikasi.
Aplikasi navigasi menggunakan Foreground Service jenis location untuk pelacakan koordinat secara terus-menerus. Layanan menampilkan notifikasi dengan kecepatan saat ini, waktu perjalanan, dan tombol berhenti pelacakan. Tanpa Foreground Service, sistem akan menghentikan pengambilan koordinat di latar belakang setelah beberapa menit, yang membuat navigasi tidak mungkin.
Aplikasi panggilan suara dan video — klien VoIP — menggunakan Foreground Service untuk mempertahankan koneksi aktif. Layanan jenis phoneCall (sejak Android 14) menjamin bahwa panggilan tidak akan terputus saat aplikasi diminimalkan. Notifikasi menampilkan durasi panggilan dan kontrol mikrofon serta speaker.
Mari kita lihat pembuatan Foreground Service di Kotlin untuk sinkronisasi data. Layanan akan dimulai dari Activity, menampilkan notifikasi dengan kemajuan, dan berakhir dengan benar setelah selesai bekerja. Contoh menunjukkan semua elemen wajib: deklarasi di manifest, saluran notifikasi, pemanggilan startForeground() dan penanganan foregroundServiceType.
class SyncService : Service() {
companion object {
const val CHANNEL_ID = "sync_channel"
const val NOTIFICATION_ID = 1001
}
override fun onCreate() {
super.onCreate()
createNotificationChannel()
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val notification = buildNotification()
startForeground(NOTIFICATION_ID, notification)
performSync()
return START_STICKY
}
private fun createNotificationChannel() {
val channel = NotificationChannel(
CHANNEL_ID,
"Sinkronisasi",
NotificationManager.IMPORTANCE_LOW
).apply {
description = "Kanal untuk sinkronisasi data"
}
val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)
}
private fun buildNotification(): Notification {
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Sinkronisasi")
.setContentText("Mengunggah data ke server")
.setSmallIcon(R.drawable.ic_sync)
.setOngoing(true)
.build()
}
private fun performSync() {
GlobalScope.launch(Dispatchers.IO) {
// Emulasi sinkronisasi
delay(5000)
stopForeground(Service.STOP_FOREGROUND_REMOVE)
stopSelf()
}
}
override fun onBind(intent: Intent): IBinder? = null
}
Untuk kerja layanan yang benar di Android 12+ perlu mendeklarasikan Foreground Service di AndroidManifest.xml dengan menyebutkan jenis dan izin yang diperlukan. Atribut foregroundServiceType wajib untuk target API 34+, dan izin FOREGROUND_SERVICE_DATA_SYNC dan POST_NOTIFICATIONS harus diminta di runtime.
<!-- AndroidManifest.xml -->
<uses-permission
android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission
android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission
android:name="android.permission.POST_NOTIFICATIONS" />
<application ...>
<service
android:name=".SyncService"
android:foregroundServiceType="dataSync"
android:exported="false" />
</application>
Meskipun keandalannya tinggi, Foreground Service memiliki keterbatasan. Yang utama adalah visibilitas bagi pengguna. Aplikasi tidak dapat menjalankan tugas jangka panjang di latar belakang tanpa notifikasi, yang tidak selalu dapat diterima dari segi UX. Selain itu, sistem dapat memaksa menghentikan bahkan Foreground Service ketika batas waktu untuk beberapa jenis terlampaui — misalnya, dataSync dibatasi hingga beberapa jam kerja.
Alternatif untuk Foreground Service adalah WorkManager — perpustakaan Android Jetpack untuk tugas yang ditunda dan latar belakang. WorkManager menjamin pelaksanaan tugas bahkan setelah perangkat di-restart dan mendukung rantai tugas, operasi periodik, dan batasan jaringan dan baterai. Untuk sebagian besar operasi latar belakang, Google merekomendasikan WorkManager, bukan layanan langsung.
JobScheduler — API bawaan Android untuk penjadwalan tugas. Cocok untuk operasi yang dapat ditunda: sinkronisasi melalui Wi-Fi, mengunduh data saat terhubung ke pengisi daya. JobScheduler menggabungkan tugas dalam jendela untuk menghemat baterai, berbeda dengan Foreground Service yang bekerja terus-menerus terlepas dari status penghematan energi.
Untuk tugas pendek (hingga 10-15 detik) dapat menggunakan CoroutineWorker dari WorkManager dengan penundaan eksekusi. Jika tugas harus dilakukan tepat pada waktu tertentu, digunakan AlarmManager bersama dengan BroadcastReceiver. Jadi, Foreground Service adalah solusi untuk operasi terus-menerus jangka panjang, bukan alat universal untuk semua skenario latar belakang.
Pertanyaan yang sering diajukan
Foreground Service — adalah layanan Android dengan notifikasi permanen di status bar yang menjalankan tugas jangka panjang di hadapan pengguna. Ini memiliki prioritas kelangsungan hidup tinggi dan tidak dihentikan oleh sistem saat kekurangan memori, berbeda dengan Background Service.
Foreground Service menampilkan notifikasi wajib, tidak memiliki batasan waktu kerja, dan dilindungi dari penghentian oleh sistem. Background Service tidak terlihat oleh pengguna, bekerja hingga 10 menit (API 26+) dan dapat dihentikan oleh Low Memory Killer kapan saja.
Android 14 mendefinisikan 9 jenis: dataSync, mediaPlayback, location, camera, connectedDevice, phoneCall, microphone, health dan remoteMessaging. Setiap jenis memerlukan izin yang sesuai dan penyebutan di manifest melalui atribut foregroundServiceType.
Jika layanan tidak memanggil startForeground() dalam 10 detik setelah pembuatan (Android 14), sistem menghasilkan pengecualian ForegroundServiceDidNotStartInTimeException dan memaksa menghentikan layanan. Aplikasi juga mendapat ANR (Application Not Responding) jika operasi dijalankan di thread utama.
Tidak, menyembunyikan notifikasi Foreground Service secara terprogram tidak mungkin. Mulai dari Android 9 (API 28), notifikasi wajib dan tidak dapat dihapus oleh pengguna. Satu-satunya cara untuk menghapusnya adalah menghentikan layanan dengan memanggil stopForeground(REMOVE_NOTIFICATION) dan stopSelf().
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.
Baca juga