Background Service — apa itu, jenis dan cara kerjanya di Android

Penulis: IT Sectr Diterbitkan: 2026-03-27 Waktu membaca: 8 mnt

Background Service — adalah komponen Android yang dirancang untuk melakukan operasi jangka panjang di latar belakang tanpa antarmuka pengguna. Tidak seperti Activity, Service terus bekerja bahkan setelah aplikasi diminimalkan atau pengguna beralih ke aplikasi lain. Menurut Android Developers, 2026, ada tiga jenis layanan: Started Service, Bound Service dan Foreground Service, masing-masing dengan siklus hidup dan ruang lingkup aplikasinya sendiri.

Utama

  • Background Service — adalah komponen Android untuk operasi latar belakang tanpa UI, bekerja independen dari aktivitas.
  • Started Service dijalankan melalui startService dan bekerja hingga penghentian eksplisit melalui stopSelf.
  • Bound Service terikat ke komponen melalui bindService dan hidup selama ada klien yang terhubung.
  • Foreground Service menampilkan notifikasi permanen dan tidak dibunuh oleh sistem saat baterai rendah.
  • Sejak versi Android 8 layanan latar belakang memiliki batasan ketat untuk dijalankan di latar belakang.

Apa itu Background Service di Android?

Background Service (atau sederhananya Service) — adalah salah satu dari empat komponen utama aplikasi Android bersama dengan Activity, BroadcastReceiver dan ContentProvider. Tidak seperti Activity, Service tidak memiliki antarmuka visual dan dirancang untuk melakukan operasi yang harus berlanjut terlepas dari apakah aplikasi berada di latar depan atau tidak.

Service bekerja di thread utama (main thread) aplikasi, oleh karena itu setiap operasi pemblokiran di dalamnya memerlukan pembuatan thread terpisah. Jika tidak dilakukan, sistem akan memanggil ANR (Application Not Responding). Untuk operasi latar belakang sederhana, Android menyediakan IntentService yang secara otomatis membuat thread kerja. Dalam proyek modern, disarankan menggunakan Kotlin-coroutine dengan CoroutineScope di dalam Service untuk pemrosesan asinkron tanpa memblokir thread utama.

Tujuan utama Service — memutar musik, mengunduh file, bekerja dengan permintaan jaringan, sinkronisasi data dan tugas-tugas lain yang harus berlanjut setelah pengguna meninggalkan aplikasi. Namun dengan dirilisnya Android 8, pengembang harus memilih jenis layanan secara sadar, dengan mempertimbangkan batasan kerja di latar belakang.

Bagaimana siklus hidup Service bekerja?

Service memiliki siklus hidup sendiri yang berbeda dari Activity. Ini mencakup empat metode kunci: onCreate, onStartCommand, onBind dan onDestroy. Memahami siklus ini diperlukan untuk implementasi tugas latar belakang yang benar tanpa kebocoran memori.

onCreate dan onStartCommand

Metode onCreate dipanggil saat pembuatan layanan, sekali selama masa hidupnya. Di dalamnya sumber daya diinisialisasi: timer, koneksi database, soket. Metode onStartCommand dipanggil setiap kali startService dipanggil, yang memungkinkan pengiriman perintah ke layanan yang sudah berjalan. Nilai yang dikembalikan menentukan perilaku sistem saat restart.

kotlin
class DownloadService : Service() {

    override fun onCreate() {
        super.onCreate()
        initializeDownloader()
    }

    override fun onStartCommand(
        intent: Intent?,
        flags: Int,
        startId: Int
    ): Int {
        downloadFile(intent?.getStringExtra("url"))
        return START_STICKY
    }

    override fun onBind(intent: Intent): IBinder? = null
}

onBind dan onDestroy

onBind dipanggil saat mengikat layanan melalui bindService dan mengembalikan objek IBinder untuk interaksi dengan klien. Metode ini hanya digunakan untuk Bound Service. onDestroy — panggilan terakhir sebelum penghancuran layanan. Di dalamnya semua sumber daya dibebaskan, thread dihentikan dan tugas dibatalkan.

Jenis layanan latar belakang

Android menawarkan tiga jenis Service, masing-masing dirancang untuk skenarionya sendiri. Memilih jenis yang salah dapat menyebabkan aplikasi tidak stabil atau konsumsi baterai berlebihan.

Started Service

Started Service dijalankan dengan memanggil startService dan bekerja sampai stopSelf atau stopService dipanggil. Cocok untuk tugas yang harus segera dilakukan: mengirim analytics, memproses gambar, mengunduh satu file. Setelah selesai, layanan berhenti sendiri.

Bound Service

Bound Service menyediakan antarmuka klien-server, memungkinkan Activity, Fragment atau komponen lain untuk berinteraksi dengan layanan. Layanan hidup selama ada setidaknya satu klien yang terikat. Ketika semua klien terlepas, layanan dihancurkan. Bound Service nyaman untuk tugas yang memerlukan komunikasi dua arah: pemutar musik, navigasi.

Foreground Service

Foreground Service — adalah Started Service dengan notifikasi permanen di bilah status. Sistem menganggap layanan seperti itu aktif dan tidak membunuhnya bahkan saat memori tidak mencukupi. Foreground Service wajib untuk memutar musik, merekam audio, melacak lokasi dan tugas-tugas lain yang penting bagi pengguna.

ParameterStartedBoundForeground
MenjalankanstartServicebindServicestartForeground
Hidupsampai stopSelfselama ada kliensampai stopForeground
Notifikasitidaktidakwajib
Dibunuhyayatidak
Contohunduhpemutarmusik

Membuat dan menjalankan Service

Membuat layanan dimulai dengan mendeklarasikan kelas yang mewarisi Service dan mendaftarkannya di AndroidManifest.xml. Tanpa pendaftaran di manifes, sistem tidak akan dapat menjalankan layanan, dan setiap panggilan startService akan menyebabkan pengecualian.

kotlin
// Pendaftaran di AndroidManifest.xml
@SuppressLint("ForegroundServiceType")
class SyncService : Service() {

    override fun onStartCommand(
        intent: Intent?,
        flags: Int,
        startId: Int
    ): Int {
        startForeground(
            NOTIFICATION_ID,
            createNotification()
        )
        performSync(intent)
        return START_NOT_STICKY
    }
}

Untuk menjalankan layanan dari Activity atau Fragment digunakan Intent dengan penyebutan kelas layanan secara eksplisit. Mulai Android 8, untuk Foreground Service diperlukan izin FOREGROUND_SERVICE di manifes.

kotlin
// Menjalankan Started Service
val intent = Intent(this, SyncService::class.java)
intent.putExtra("action", "sync")
startService(intent)

// Menjalankan Foreground Service (Android 8+)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    startForegroundService(intent)
} else {
    startService(intent)
}

Batasan di Android 8+

Mulai Android 8 (API 26) Google memberlakukan batasan ketat pada layanan latar belakang. Menjalankan Service di latar belakang (saat aplikasi tidak di latar depan) hanya diizinkan dalam kasus luar biasa: saat menerima notifikasi push, setelah perangkat boot, atau melalui JobScheduler.

Untuk tugas jangka panjang yang tidak memerlukan eksekusi segera, disarankan menggunakan WorkManager atau JobScheduler. Jika aplikasi benar-benar membutuhkan layanan yang berjalan, satu-satunya cara adalah Foreground Service dengan notifikasi yang dilihat pengguna. Menjalankan layanan di latar belakang tanpa notifikasi akan diabaikan oleh sistem.

JobIntentService untuk kompatibilitas mundur

JobIntentService — adalah kelas khusus yang muncul di support library untuk bekerja pada Android 5+. Ini menggabungkan perilaku IntentService (thread kerja otomatis, pemrosesan sekuensial) dengan penjadwalan melalui JobScheduler. Di Android 8+ JobIntentService menggunakan JobScheduler di bawah kap, dan pada versi yang lebih lama menggunakan Service biasa. Ini memungkinkan penanganan seragam tugas latar belakang tanpa pemeriksaan versi Android tambahan.

kotlin
class UploadJobService : JobIntentService() {

    companion object {
        private const val JOB_ID = 1000

        fun enqueueWork(context: Context, work: Intent) {
            enqueueWork(
                context,
                UploadJobService::class.java,
                JOB_ID,
                work
            )
        }
    }

    override fun onHandleWork(intent: Intent) {
        val fileUri = intent.getStringExtra("file_uri")
        // Dieksekusi di thread latar belakang
        uploadFile(fileUri)
    }
}

Manajemen memori dan kebocoran di Service

Salah satu masalah umum saat bekerja dengan Background Service adalah kebocoran memori. Karena Service dapat hidup lebih lama dari Activity, referensi ke Activity di dalam Service (melalui listener, callback atau broadcast) menyebabkan ketidakmampuan pengumpulan sampah untuk komponen UI. Disarankan menggunakan WeakReference, ViewModel atau LiveData untuk komunikasi Service dengan UI. Di onDestroy harus membatalkan semua langganan, menghentikan thread dan menutup kursor.

Service vs WorkManager: kapan memilih apa

Pilihan antara Background Service dan WorkManager tergantung pada skenario. Service cocok untuk tugas yang harus segera dan terus menerus dilakukan: memutar musik, merekam audio, melacak GPS. WorkManager lebih baik untuk tugas yang ditunda dan dijamin: sinkronisasi, mengirim analytics, mengunggah log. WorkManager bertahan dari restart perangkat, sedangkan Service tidak. Service bisa menjadi Foreground dengan notifikasi, sementara WorkManager bekerja diam di latar belakang. Dalam praktiknya, pengembang menggabungkan kedua pendekatan: Foreground Service untuk tugas kritis pengguna dan WorkManager untuk pemeliharaan latar belakang.

Android 12 memperkenalkan bendera android:foregroundServiceType yang mengharuskan menentukan jenis layanan: dataSync, camera, connectedDevice, location, mediaPlayback dan lainnya. Penentuan jenis yang salah menyebabkan pengecualian saat startup. Praktik ini membuat Background Service lebih transparan bagi pengguna dan sistem.

Contoh pendaftaran Service di AndroidManifest

Pendaftaran Service yang benar di manifes mencakup atribut exported (aksesibilitas untuk aplikasi eksternal), foregroundServiceType (jenis layanan latar belakang di Android 12+) dan permission. Untuk Bound Service juga perlu mendeklarasikan android:permission="android.permission.BIND_JOB_SERVICE" untuk JobIntentService. Tanpa pendaftaran di manifes, setiap panggilan startService atau bindService akan berakhir dengan pengecualian, oleh karena itu pemeriksaan manifes adalah langkah pertama dalam mendiagnosis masalah dengan Service.

Pertanyaan yang sering diajukan

Di thread mana Service berjalan secara default?

Service berjalan di thread utama (UI Thread) aplikasi. Setiap operasi pemblokiran di dalam onStartCommand atau onHandleIntent harus dipindahkan ke thread terpisah atau coroutine, jika tidak sistem akan memanggil ANR setelah 5 detik.

Apa perbedaan IntentService dengan Service biasa?

IntentService — adalah turunan Service yang secara otomatis membuat thread kerja dan memproses perintah secara sekuensial. Setelah tugas terakhir selesai, IntentService berhenti sendiri. Mulai Android 8, IntentService dianggap usang demi JobIntentService atau WorkManager.

Bisakah menjalankan Service saat aplikasi di latar belakang di Android 12?

Menjalankan Started Service dari latar belakang di Android 12 dilarang. Pengecualian — Foreground Service dengan foregroundServiceType yang dideklarasikan di manifes dan notifikasi yang valid. Juga diizinkan start singkat setelah menerima pesan FCM prioritas tinggi.

Bagaimana cara mengirim data dari Service ke Activity?

Ada tiga cara: BroadcastReceiver dengan broadcast lokal, mekanisme Messenger melalui Handler, dan LiveData/Flow dalam arsitektur MVVM dengan ViewModel bersama. Untuk Bound Service digunakan IBinder dengan pemanggilan metode langsung.

Apa yang terjadi jika aplikasi di-restart saat Service sedang berjalan?

Jika Service dijalankan dengan bendera START_STICKY, sistem akan merestartnya setelah penghancuran proses karena kekurangan memori. Bendera START_NOT_STICKY berarti sistem tidak akan merestart layanan. START_REDELIVER_INTENT mirip dengan START_STICKY, tetapi mengirimkan Intent terakhir.

Kesimpulan

  • Background Service — adalah komponen Android untuk operasi latar belakang tanpa antarmuka, bekerja di thread utama.
  • Tiga jenis — Started, Bound dan Foreground — mencakup berbagai skenario: dari tugas satu kali hingga kerja terus menerus dengan notifikasi.
  • Siklus hidup mencakup onCreate, onStartCommand, onBind dan onDestroy — penting membebaskan sumber daya di onDestroy.
  • Foreground Service — satu-satunya jenis yang stabil bekerja di Android 8+ tanpa risiko dibunuh oleh sistem.
  • WorkManager dan JobScheduler lebih disukai untuk tugas latar belakang yang ditunda dan dijamin.
  • Jangan gunakan Service untuk tugas yang memerlukan waktu eksekusi tepat — untuk itu ada AlarmManager.
  • Selalu daftarkan Service di AndroidManifest.xml dan tentukan android:foregroundServiceType di Android 12+.

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.

Diskusikan proyek

Baca juga