Background Service — bu nima, turlari va Android-da qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-03-27 O'qish vaqti: 8 daq

Background Service — Android komponenti bo‘lib, foydalanuvchi interfeysisiz fon rejimida uzoq muddatli operatsiyalarni bajarish üçün mo‘ljallangan. Activity-dan farqli o‘laroq, Service ilova kichraytirilgan yoki foydalanuvchi boshqa ilovaga o‘tgan taqdirda ham ishlashda davom etadi. Android Developers, 2026 ma’lumotlariga ko‘ra, uch turdagi servis mavjud: Started Service, Bound Service va Foreground Service, har biri o‘z hayot sikli va qo‘llanish sohasiga ega.

Asosiy

  • Background Service — UIsiz fon operatsiyalari üçün Android komponenti, faoliyatdan mustaqil ishlaydi.
  • Started Service startService orqali ishga tushiriladi va stopSelf orqali aniq to‘xtatilgunga qadar ishlaydi.
  • Bound Service bindService orqali komponentga bog‘lanadi va bog‘langan mijozlar mavjud ekan, yashaydi.
  • Foreground Service doimiy bildirishnomani ko‘rsatadi va batareya past bo‘lganda tizim tomonidan o‘ldirilmaydi.
  • Android 8 versiyasidan boshlab fon servislari fonda ishga tushirishda qattiq cheklovlarga ega.

Android-da Background Service nima?

Background Service (yoki oddiygina Service) — Activity, BroadcastReceiver va ContentProvider bilan bir qatorda Android ilovasining to‘rtta asosiy komponentidan biridir. Activity-dan farqli o‘laroq, Service vizual interfeysga ega emas va ilova oldingi planda yoki yo‘qligidan qat’i nazar davom ettirilishi kerak bo‘lgan operatsiyalarni bajarish üçün mo‘ljallangan.

Service ilovaning asosiy oqimida (main thread) ishlaydi, shuning üçün uning ichidagi har qanday blokirovka operatsiyasi alohida oqim yaratishni talab qiladi. Agar bu bajarilmasa, tizim ANR (Application Not Responding) chaqiradi. Oddiy fon operatsiyalari üçün Android IntentService ni taqdim etadi, u avtomatik ravishda ishchi oqim yaratadi. Zamonaviy loyihalarda asosiy oqimni bloklamasdan asinxron qayta ishlash üçün Service ichida CoroutineScope bilan Kotlin korutinlaridan foydalanish tavsiya etiladi.

Service-ning asosiy maqsadi — musiqa tinglash, fayllarni yuklash, tarmoq so‘rovlari bilan ishlash, ma’lumotlarni sinxronlashtirish va foydalanuvchi ilovani tark etgandan keyin davom ettirilishi kerak bo‘lgan boshqa vazifalar. Biroq Android 8 chiqishi bilan dasturchilar fon ishining cheklovlarini hisobga olgan holda servis turlari o‘rtasida ongli ravishda tanlov qilishlari kerak.

Service hayot sikli qanday ishlaydi?

Service o‘ziga xos hayot siklga ega bo‘lib, u Activity-dan farq qiladi. U to‘rtta asosiy metodni o‘z ichiga oladi: onCreate, onStartCommand, onBind va onDestroy. Ushbu siklning tushunilishi xotira oqishisiz fon vazifalarini to‘g‘ri amalga oshirish üçün zarurdir.

onCreate va onStartCommand

onCreate metodi servis yaratilganda, uning hayoti davomida bir marta chaqiriladi. Unda resurslar ishga tushiriladi: taymerlar, ma’lumotlar bazasiga ulanishlar, soketlar. onStartCommand metodi har safar startService chaqirilganda ishga tushadi, bu allaqachon ishlayotgan servisga buyruqlarni uzatish imkonini beradi. Qaytarilgan qiymat tizimning qayta ishga tushirishdagi xatti-harakatini aniqlaydi.

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 va onDestroy

onBind bindService orqali servis bog‘langanda chaqiriladi va mijoz bilan o‘zaro aloqa üçün IBinder obyektini qaytaradi. Bu metod faqat Bound Service üçün ishlatiladi. onDestroy — servis yo‘q qilinishidan oldingi so‘nggi chaqiruvdir. Unda barcha resurslar bo‘shatiladi, to‘xtatilgan oqimlar va bekor qilingan vazifalar tozalanadi.

Fon servislari turlari

Android uch turdagi Service ni taklif qiladi, har biri o‘z stsenariysi üçün mo‘ljallangan. Noto‘g‘ri turni tanlash ilovaning beqaror ishlashiga yoki batareyaning tez sarflanishiga olib kelishi mumkin.

Started Service

Started Service startService chaqiruvi bilan ishga tushiriladi va stopSelf yoki stopService chaqirilgunga qadar ishlaydi. U darhol bajarilishi kerak bo‘lgan vazifalar üçün mos keladi: analitika yuborish, rasmni qayta ishlash, bitta faylni yuklash. Ish tugagandan so‘ng servis o‘zini o‘zi to‘xtatadi.

Bound Service

Bound Service mijoz-server interfeysini taqdim etadi, bu Activity, Fragment yoki boshqa komponentga servis bilan o‘zaro aloqa qilish imkonini beradi. Servis kamida bitta bog‘langan mijoz mavjud ekan, yashaydi. Barcha mijozlar uzilganda servis yo‘q qilinadi. Bound Service ikki tomonlama aloqa talab qiladigan vazifalar üçün qulaydir: musiqa pleyeri, navigatsiya.

Foreground Service

Foreground Service — status barda doimiy bildirishnomaga ega Started Service. Tizim bunday servisni faol deb hisoblaydi va xotira yetishmovchiligi bo‘lsa ham uni o‘ldirmaydi. Foreground Service musiqa tinglash, audio yozish, joylashuvni kuzatish va foydalanuvchi üçün muhim bo‘lgan boshqa vazifalar üçün majburiydir.

ParametrStartedBoundForeground
Ishga tushirishstartServicebindServicestartForeground
HayotstopSelfgachamijozlar borstopForegroundgacha
Bildirishnomayo‘qyo‘qmajburiy
O‘ldiriladihahayo‘q
Misolyuklashpleyermusiqa

Service yaratish va ishga tushirish

Yaratish Service dan meros olgan sinfni e‘lon qilish va uni AndroidManifest.xml da ro‘yxatdan o‘tkazish bilan boshlanadi. Manifestda ro‘yxatdan o‘tmasdan tizim servisni ishga tushira olmaydi va har qanday startService chaqiruvi istisnoga olib keladi.

kotlin
// AndroidManifest.xml da ro‘yxatdan o‘tkazish
@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
    }
}

Servisni Activity yoki Fragment dan ishga tushirish üçün servis sinfining aniq ko‘rsatilgan Intent dan foydalaniladi. Android 8 dan boshlab Foreground Service üçün manifestda FOREGROUND_SERVICE ruxsati talab qilinadi.

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

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

Android 8+ cheklovlari

Android 8 dan (API 26) boshlab Google fon servislariga qattiq cheklovlar joriy qildi. Service ni fonda ishga tushirish (ilova oldingi planda bo‘lmaganda) faqat istisno hollarda ruxsat etiladi: push bildirishnomasi olinganda, qurilma yuklangandan so‘ng yoki JobScheduler orqali.

Darhol bajarilishni talab qilmaydigan uzoq muddatli vazifalar üçün WorkManager yoki JobScheduler dan foydalanish tavsiya etiladi. Agar ilova haqiqatan ham ishlayotgan servisga muhtoj bo‘lsa, yagona yo‘l — foydalanuvchi ko‘radigan bildirishnoma bilan Foreground Service. Fonda bildirishnomasiz servisni ishga tushirish tizim tomonidan e‘tiborga olinmaydi.

Qayta moslik üçün JobIntentService

JobIntentService — Android 5+ da ishlash üçün support library da paydo bo‘lgan ixtisoslashtirilgan sinf. U IntentService ning xatti-harakatini (avtomatik ishchi oqim, ketma-ket qayta ishlash) JobScheduler orqali rejalashtirish bilan birlashtiradi. Android 8+ da JobIntentService JobScheduler dan foydalanadi, eski versiyalarda esa oddiy Service dan. Bu Android versiyasini qo‘shimcha tekshirmasdan fon vazifalarini bir xilda boshqarish imkonini beradi.

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 oqimida bajariladi
        uploadFile(fileUri)
    }
}

Xotira boshqaruvi va Service da oqishlar

Background Service bilan ishlashda tez-tez uchraydigan muammolardan biri xotira oqishidir. Service Activity dan uzoqroq yashashi mumkinligi sababli, Service ichidagi Activity ga havolalar (listener, callback yoki broadcast orqali) UI komponentlari üçün axlat yig‘uvchining tozalanmasligiga olib keladi. Service ni UI bilan bog‘lash üçün WeakReference, ViewModel yoki LiveData dan foydalanish tavsiya etiladi. onDestroy da barcha obunalar bekor qilinishi, oqimlar to‘xtatilishi va kursorlar yopilishi kerak.

Service vs WorkManager: qachon nimani tanlash

Background Service va WorkManager o‘rtasidagi tanlov stsenariyga bog‘liq. Service darhol va uzluksiz bajarilishi kerak bo‘lgan vazifalar üçün mos keladi: musiqa tinglash, audio yozish, GPS kuzatish. WorkManager kechiktirilgan, kafolatlangan vazifalar üçün yaxshiroq: sinxronlashtirish, analitika yuborish, loglarni yuklash. WorkManager qurilmaning qayta ishga tushishidan omon qoladi, Service esa yo‘q. Service bildirishnoma bilan Foreground bo‘lishi mumkin, WorkManager esa fonda jim ishlaydi. Amalda dasturchilar ikkala yondashuvni birlashtiradilar: kritik foydalanuvchi vazifalari üçün Foreground Service va fon xizmati üçün WorkManager.

Android 12 android:foregroundServiceType flagini taqdim etdi, u xizmat turini ko‘rsatishni talab qiladi: dataSync, camera, connectedDevice, location, mediaPlayback va boshqalar. Turini noto‘g‘ri ko‘rsatish ishga tushirishda istisnoga olib keladi. Bu amaliyot Background Service ni foydalanuvchi va tizim üçün shaffofroq qiladi.

AndroidManifest da Service ro‘yxatidan o‘tkazish namunasi

Manifestda Service ni to‘g‘ri ro‘yxatdan o‘tkazish exported (tashqi ilovalar üçün mavjudlik), foregroundServiceType (Android 12+ da fon xizmat turi) va permission atributlarini o‘z ichiga oladi. Bound Service üçün JobIntentService üçün android:permission="android.permission.BIND_JOB_SERVICE" e‘lon qilinishi kerak. Manifestda ro‘yxatdan o‘tmasdan, har qanday startService yoki bindService chaqiruvi istisno bilan tugaydi, shuning üçün manifestni tekshirish Service bilan bog‘liq muammolarni tashxislashda birinchi qadamdir.

Tez-tez beriladigan savollar

Service sukut bo‘yicha qaysi oqimda ishlaydi?

Service ilovaning asosiy oqimida (UI Thread) ishlaydi. onStartCommand yoki onHandleIntent ichidagi har qanday blokirovka operatsiyasi alohida oqimga yoki korutinga ko‘chirilishi kerak, aks holda tizim 5 soniyadan so‘ng ANR chaqiradi.

IntentService oddiy Service dan nimasi bilan farq qiladi?

IntentService — avtomatik ravishda ishchi oqim yaratadigan va buyruqlarni ketma-ket qayta ishlaydigan Service vorisidir. Oxirgi vazifa tugagandan so‘ng IntentService o‘zini o‘zi to‘xtatadi. Android 8 dan boshlab IntentService JobIntentService yoki WorkManager foydasiga eskirgan hisoblanadi.

Android 12 da ilova fonda bo‘lganda Service ni ishga tushirish mumkinmi?

Android 12 da fondan Started Service ni ishga tushirish taqiqlangan. Istisno — manifestda e‘lon qilingan foregroundServiceType va haqiqiy bildirishnomaga ega Foreground Service. Shuningdek, yuqori prioritetli FCM xabari olingandan so‘ng qisqa muddatli ishga tushirishga ruxsat beriladi.

Service dan Activity ga ma’lumotlarni qanday uzatish mumkin?

Uchta usul mavjud: lokal broadcast bilan BroadcastReceiver, Handler orqali Messenger mexanizmi va MVVM arxitekturasida umumiy ViewModel bilan LiveData/Flow. Bound Service üçün metodlarni to‘g‘ridan-to‘g‘ri chaqirish bilan IBinder ishlatiladi.

Service ishlayotgan paytda ilova qayta ishga tushirilsa nima bo‘ladi?

Agar Service START_STICKY flagi bilan ishga tushirilgan bo‘lsa, tizim xotira yetishmovchiligi sababli jarayon yo‘q qilingandan so‘ng uni qayta ishga tushiradi. START_NOT_STICKY flagi tizim servisni qayta ishga tushirmasligini bildiradi. START_REDELIVER_INTENT START_STICKY ga o‘xshaydi, ammo oxirgi Intent ni uzatadi.

Xulosa

  • Background Service — interfeysi bo‘lmagan, asosiy oqimda ishlaydigan fon operatsiyalari üçün Android komponenti.
  • Uch tur — Started, Bound va Foreground — bir martalik vazifadan bildirishnoma bilan doimiy ishgacha turli stsenariylarni qamrab oladi.
  • Hayot sikli onCreate, onStartCommand, onBind va onDestroy ni o‘z ichiga oladi — onDestroy da resurslarni bo‘shatish muhim.
  • Foreground Service — Android 8+ da tizim tomonidan o‘ldirilish xavfisiz barqaror ishlaydigan yagona tur.
  • WorkManager va JobScheduler kechiktirilgan va kafolatlangan fon vazifalari üçün afzal.
  • Service dan foydalanmang aniq vaqt talab qiladigan vazifalar üçün — buning üçün AlarmManager mavjud.
  • Har doim ro‘yxatdan o‘tkazing Service ni AndroidManifest.xml da va Android 12+ da android:foregroundServiceType ni belgilang.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing