Sobes.tech
Middle

Androidda foniy xizmat (oldingi xizmat) nima?

sobes.tech AI

AIdan javob

Androidda fon (foreground service) — bu yuqori ustuvorlikka ega va foydalanuvchiga ko‘rinadigan servis turidir. U foydalanuvchi uchun sezilarli bo‘ladigan vazifalarni bajaradi va batareya yoki xotira tejash uchun to‘xtatilmasligi kerak.

Asosiy xususiyatlar:

  • Bildirishnomalar panelida doimiy bildirishnoma ko‘rsatadi. Foydalanuvchi servisin ishga tushganligini ko‘rishi va ehtimol unga bilan muloqot qilishi mumkin.
  • Tizim oddiy fon servis yoki oqimga nisbatan yuqori ustuvorligi tufayli fon servisni tugatish ehtimoli kamroq.
  • Maxsus ruxsatnoma FOREGROUND_SERVICE talab qilinadi.
  • Musiqa ijro etish, joylashuvni kuzatish, real vaqtda ma'lumotlarni sinxronlashtirish kabi vazifalar uchun ishlatiladi.

Hayot aylanishi:

  1. startForegroundService() yordamida boshlanadi.
  2. 5 sekund ichida startForeground(notificationId, notification) chaqirilishi kerak, aks holda tizim servisni to‘xtatishi va ForegroundServiceDidNotStartInTimeException xatosini chiqarishi mumkin.
  3. stopSelf() yoki boshqa komponentdan stopService() yordamida yoki foydalanuvchi tomonidan bildirishnoma orqali majburan to‘xtatiladi. To‘xtatishda stopForeground(bool removeNotification) chaqirilishi va bildirishnomani olib tashlash kerak.

Boshlash misoli:

// Ruxsat olish
ActivityCompat.requestPermissions(
    this,
    arrayOf(Manifest.permission.FOREGROUND_SERVICE),
    REQUEST_CODE_FOREGROUND_SERVICE
)

// Ruxsat olgandan so‘ng yoki ruxsat allaqachon bo‘lsa
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)

Servis ichida:

// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    val notification: Notification = createNotification() // Bildirishnoma yaratish metodi
    startForeground(NOTIFICATION_ID, notification)
    // Bu yerda servis vazifasi boshlanadi
    return START_STICKY // Yoki boshqa mos bayroq
}

override fun onDestroy() {
    stopForeground(true) // To‘xtashda bildirishnomani olib tashlash
    // Resurslarni tozalash
    super.onDestroy()
}