Background Service — bu nədir, növləri və Android-də necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-03-27 Oxuma vaxtı: 8 dəq

Background Service — istifadəçi interfeysi olmadan fon rejimində uzunmüddətli əməliyyatları yerinə yetirmək üçün nəzərdə tutulmuş Android komponentidir. Activity-dən fərqli olaraq, Service tətbiq bağlansa və ya istifadəçi başqa tətbiqə keçsə belə işləməyə davam edir. Android Developers, 2026 məlumatlarına görə, üç növ servis mövcuddur: Started Service, Bound Service və Foreground Service, hər birinin öz həyat dövriü və tətbiq sahəsi var.

Başlıca

  • Background Service — UI olmadan fon əməliyyatları üçün Android komponenti, aktivlikdən asılı olmayaraq işləyir.
  • Started Service startService vasitəsilə işə salınır və stopSelf ilə açıq dayandırılana qədər işləyir.
  • Bound Service bindService vasitəsilə komponentə bağlanır və bağlı müştərilər olduğu müddət yaşayır.
  • Foreground Service daimi bildiriş göstərir və batareya az olduqda sistem tərəfindən öldürülmür.
  • Android 8 versiyasından etibarən fon servislərinin işə salınması ciddi məhdudiyyətlərə malikdir.

Android-də Background Service nədir?

Background Service (və ya sadəcə Service) — Activity, BroadcastReceiver və ContentProvider ilə yanaşı Android tətbiqinin dörd əsas komponentindən biridir. Activity-dən fərqli olaraq, Service görünüş interfeysinə malik deyil və tətbiqin ön planda olub-olmamasından asılı olmayaraq davam etdirilməli olan əməliyyatları yerinə yetirmək üçün nəzərdə tutulub.

Service tətbiqin əsas thread-ində (main thread) işləyir, ona görə də onun daxilindəki istənilən bloklama əməliyyatı ayrıca thread-in yaradılmasını tələb edir. Bu edilməzsə, sistem ANR (Application Not Responding) xətasını çağıracaq. Sadə fon əməliyyatları üçün Android IntentService təqdim edir, o avtomatik olaraq işçi thread yaradır. Müasir layihələrdə əsas thread-i bloklamadan asinxron emal üçün Service daxilində CoroutineScope ilə Kotlin korutinlərindən istifadə etmək tövsiyə olunur.

Service-in əsas məqsədi — musiqi oxutma, fayl yükləmə, şəbəkə sorğuları ilə işləmə, məlumat sinxronizasiyası və istifadəçinin tətbiqdən çıxmasından sonra davam etdirilməli olan digər tapşırıqlar. Lakin Android 8-in buraxılması ilə tərtibatçılar fon işinin məhdudiyyətlərini nəzərə alaraq servis növləri arasında şüurlı seçim etməlidirlər.

Service-in həyat dövriü necə işləyir?

Service özünə məxsus həyat dövriünə malikdir ki, bu da Activity-dən fərqlənir. O, dörd əsas metodu əhatə edir: onCreate, onStartCommand, onBind və onDestroy. Bu dövrün başa düşülməsi yaddaş sızıntıları olmadan fon tapşırıqlarının düzgün həyata keçirilməsi üçün zəruridir.

onCreate və onStartCommand

onCreate metodu servis yaradıldıqda, onun ömrü boyu bir dəfə çağırılır. Burada resurslar başladılır: taymerlər, verilənlər bazasına qoşulmalar, socket-lər. onStartCommand metodu hər dəfə startService çağırıldıqda işə düşür ki, bu da artıq işləyən servisə əmrlər ötürməyə imkan verir. Qaytarılan dəyər sistemin yenidən başladılmada davranışını müəyyən edir.

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 və onDestroy

onBind bindService vasitəsilə servis bağlandıqda çağırılır və müştəri ilə qarşılıqlı əlaqə üçün IBinder obyekti qaytarır. Bu metod yalnız Bound Service üçün istifadə olunur. onDestroy — servisin məhv edilməsindən əvvəl son çağırışdır. Burada bütün resurslar azad edilir, dayandırılmış thread-lər və ləğv edilmiş tapşırıqlar təmizlənir.

Fon servislərinin növləri

Android üç növ Service təklif edir, hər biri öz ssenarisi üçün nəzərdə tutulub. Səhv növün seçilməsi tətbiqin qeyri-sabit işinə və ya batareyanın sürətlə boşalmasına səbəb ola bilər.

Started Service

Started Service startService çağırışı ilə işə salınır və stopSelf və ya stopService çağırılana qədər işləyir. O, dərhal yerinə yetirilməli olan tapşırıqlar üçün uyğundur: analitika göndərmə, şəkil emalı, tək faylın yüklənməsi. İş tamamlandıqdan sonra servis özü dayanır.

Bound Service

Bound Service müştəri-server interfeysi təmin edərək Activity, Fragment və ya digər komponentə servislə qarşılıqlı əlaqəyə imkan verir. Servis ən azı bir bağlı müştəri olduğu müddət yaşayır. Bütün müştərilər ayrıldıqda servis məhv edilir. Bound Service ikitərəfli əlaqə tələb edən tapşırıqlar üçün əlverişlidir: musiqi pleyeri, naviqasiya.

Foreground Service

Foreground Service — status bar-ında daimi bildirişi olan Started Service-dir. Sistem belə bir servisi aktiv hesab edir və yaddaş çatışmazlığı olsa belə onu öldürmür. Foreground Service musiqi oxutma, audio yazma, yer müyyənləşdirmə və istifadəçi üçün əhəmiyyətli digər tapşırıqlar üçün məcburidir.

ParametrStartedBoundForeground
İşə salmastartServicebindServicestartForeground
ÖmürstopSelfə qədərmüştərilər varstopForegroundə qədər
Bildirişyoxyoxməcburi
Öldürülürbəlibəlixeyr
Nümunəyükləməpleyermusiqi

Service-in yaradılması və işə salınması

Yaradılma Service-dən vəris alan sinfin elan edilməsi və onun AndroidManifest.xml-də qeydiyyatdan keçirilməsi ilə başlayır. Manifestdə qeydiyyat olmadan sistem servisi işə sala bilməz və hər hansı startService çağırışı istisnaya səbəb olacaq.

kotlin
// AndroidManifest.xml-də qeydiyyat
@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
    }
}

Servisi Activity və ya Fragment-dən işə salmaq üçün servis sinfinin açıq göstərildiyi Intent istifadə olunur. Android 8-dən etibarən Foreground Service üçün manifestdə FOREGROUND_SERVICE icazəsi tələb olunur.

kotlin
// Started Service-in işə salınması
val intent = Intent(this, SyncService::class.java)
intent.putExtra("action", "sync")
startService(intent)

// Foreground Service-in işə salınması (Android 8+)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    startForegroundService(intent)
} else {
    startService(intent)
}

Android 8+ məhdudiyyətləri

Android 8-dən (API 26) etibarən Google fon servislərinə ciddi məhdudiyyətlər tətbiq edib. Fon rejimində Service işə salma (tətbiq ön planda olmadıqda) yalnız istisna hallarda icazəlidir: push bildirişi alındıqda, cihaz yükləndikdən sonra və ya JobScheduler vasitəsilə.

Dərhal yerinə yetirilməsi tələb olunmayan uzunmüddətli tapşırıqlar üçün WorkManager və ya JobScheduler istifadə etmək tövsiyə olunur. Əgər tətbiq həqiqətən də işləyən servisə ehtiyac duyursa, yeganə yol — istifadəçinin gördüyü bildirişlə Foreground Service-dir. Bildirişsiz fon servisinin işə salınması sistem tərəfindən nəzərdən qaçırılacaq.

Geri uyğunluq üçün JobIntentService

JobIntentService — Android 5+-də işləmək üçün support kitabxanasında peyda olan ixtisaslaşdırılmış sinifdir. O, IntentService-in davranışını (avtomatik işçi thread, ardıcıl emal) JobScheduler vasitəsilə planlaşdırma ilə birləşdirir. Android 8+-da JobIntentService JobScheduler-dən istifadə edir, köhnə versiyalarda isə adi Service-dən. Bu, Android versiyasını əlavə yoxlamadan fon tapşırıqlarını vahid şəkildə idarə etməyə imkan verir.

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")
        // Fon thread-də icra olunur
        uploadFile(fileUri)
    }
}

Yaddaş idarəetməsi və Service-də sızıntılar

Background Service ilə işləyərkən tez-tez rast gəlinən problemlərdən biri yaddaş sızıntılarıdır. Service Activity-dən daha uzun yaşaya bildiyi üçün, Service daxilində Activity-yə istinadlar (listener, callback və ya broadcast vasitəsilə) UI komponentlərinin zibil yığıcı tərəfindən təmizlənməməsinə səbəb olur. Service ilə UI arasında əlaqə üçün WeakReference, ViewModel və ya LiveData istifadə etmək tövsiyə olunur. onDestroy-də bütün abunəliklər ləğv edilməli, thread-lər dayandırılmalı və kursorlar bağlanmalıdır.

Service vs WorkManager: nəyi nə vaxt seçməli

Background Service ilə WorkManager arasında seçim ssenaridən asılıdır. Service dərhal və fasiləsiz yerinə yetirilməli olan tapşırıqlar üçün uyğundur: musiqi oxutma, audio yazma, GPS izləmə. WorkManager təxirə salınmış, zəmanətli tapşırıqlar üçün daha yaxşıdır: sinxronizasiya, analitika göndərmə, logların yüklənməsi. WorkManager cihazın yenidən başlamasından sağ çıxır, Service isə çıxmır. Service bildirişlə Foreground ola bilər, WorkManager isə səssizcə fonda işləyir. Təcrübədə tərtibatçılar hər iki yanaşmanı birləşdirirlər: kritik istifadəçi tapşırıqları üçün Foreground Service və fon xidməti üçün WorkManager.

Android 12 android:foregroundServiceType flag-ını təqdim etdi ki, bu da xidmət növünü təyin etməyi tələb edir: dataSync, camera, connectedDevice, location, mediaPlayback və başqaları. Növün səhv göstərilməsi işə salma zamanı istisnaya səbəb olur. Bu təcrübə Background Service-i istifadəçi və sistem üçün daha şəffaf edir.

AndroidManifest-də Service qeydiyyatı nümunəsi

Manifestdə Service-in düzgün qeydiyyatı exported (xarici tətbiqlər üçün çatışlılıq), foregroundServiceType (Android 12+-da fon xidmət növü) və permission atributlarını əhatə edir. Bound Service üçün JobIntentService üçün android:permission="android.permission.BIND_JOB_SERVICE" elan edilməlidir. Manifestdə qeydiyyat olmadan hər hansı startService və ya bindService çağırışı istisna ilə nəticələnəcək, buna görə də manifestin yoxlanması Service ilə bağlı problemlərin diaqnostikasında ilk addımdır.

Tez-tez verilən suallar

Service standart olaraq hansı thread-də işləyir?

Service tətbiqin əsas thread-ində (UI Thread) işləyir. onStartCommand və ya onHandleIntent daxilindəki istənilən bloklama əməliyyatı ayrıca threadə və ya korutinə köçürülməlidir, əks halda sistem 5 saniyədən sonra ANR çağıracaq.

IntentService adi Service-dən nə ilə fərqlənir?

IntentService — avtomatik olaraq işçi thread yaradan və əmrləri ardıcıl emal edən Service varisidir. Son tapşırığı tamamladıqdan sonra IntentService özü dayanır. Android 8-dən etibarən IntentService JobIntentService və ya WorkManager lehinə köhnəlmiş sayılır.

Android 12-də tətbiq fonda olduqda Service işə salmaq olarmı?

Android 12-də fondan Started Service işə salmaq qadağandır. İstisna — manifestdə elan edilmiş foregroundServiceType və etibarlı bildirişi olan Foreground Service. Həmçinin yüksək prioritetli FCM mesajı alındıqdan sonra qısa müddətli başlatmaya icazə verilir.

Service-dən Activity-yə məlumatları necə ötürmək olar?

Üç üsul var: lokal broadcast ilə BroadcastReceiver, Handler vasitəsilə Messenger mexanizmi və MVVM arxitekturasında ümumi ViewModel ilə LiveData/Flow. Bound Service üçün metodların birbaşa çağırılması ilə IBinder istifadə olunur.

Service işləyərkən tətbiq yenidən başladılarsa nə baş verir?

Əgər Service START_STICKY flag-ı ilə işə salınıbsa, sistem yaddaş çatışmazlığı səbəbindən proses məhv edildikdən sonra onu yenidən başladacaq. START_NOT_STICKY flag-ı sistemin servisi yenidən başlatmayacağını bildirir. START_REDELIVER_INTENT START_STICKY-ə bənzəyir, lakin son Intent-i ötürür.

Nəticə

  • Background Service — interfeysi olmayan, əsas thread-də işləyən fon əməliyyatları üçün Android komponentidir.
  • Üç növ — Started, Bound və Foreground — birdəfəlik tapşırıqdan bildirişlə daimi işə qədər mütəlif ssenariləri əhatə edir.
  • Həyat dövriü onCreate, onStartCommand, onBind və onDestroy-i əhatə edir — onDestroy-də resursları azad etmək vacibdir.
  • Foreground Service — Android 8+-da sistem tərəfindən öldürülmə riski olmadan stabil işləyən yeganə növdür.
  • WorkManager və JobScheduler təxirə salınmış və zəmanətli fon tapşırıqları üçün daha üstündür.
  • Service-dən istifadə etməyin dəqiq vaxt tələb edən tapşırıqlar üçün — bunun üçün AlarmManager var.
  • Həmişə qeydiyyatdan keçirin Service-i AndroidManifest.xml-də və Android 12+-da android:foregroundServiceType qeyd edin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun