Sobes.tech
Middle

Androidда фондук кызмат (алдыңкы кызмат) эмне?

sobes.tech AI

AIден жооп

Фондук кызмат (foreground service) — Androidдеги кызматтын түрү, ал жогору приоритетке ээ жана колдонуучу көрө алат. Ал колдонуучу үчүн байкалган жана батареяны үнөмдөө же эс тутумдун жетишсиздигинде үзгүлтүккө учурабаган тапшырмаларды аткарат.

Негизги өзгөчөлүктөрү:

  • Туруктуу билдирүүнү билдирүү тилкесинде көрсөтөт. Колдонуучу кызмат иштеп жатканына көрө алат жана мүмкүн болсо, менен иштеше алат.
  • Жүйө жогорку приоритетке ээ болгондуктан, кадимки фоновая кызматка караганда, ал көбүрөөк убакытка сакталат.
  • Специальдүү уруксатты талап кылат FOREGROUND_SERVICE.
  • Музыка ойнотуу, жайгашкан жерди көзөмөлдөө, реалдуу убакытта маалыматтарды синхрондоо сыяктуу тапшырмалар үчүн колдонулат.

Өмүр цикли:

  1. startForegroundService() аркылуу ишке киргизилет.
  2. 5 секунд ичинде startForeground(notificationId, notification) чакырышы керек, башкача системасы кызматты токтотуп, ForegroundServiceDidNotStartInTimeException чыгара алат.
  3. stopSelf() же башка компоненттен stopService() аркылуу, же колдонуучу тарабынан билдирүү аркылуу токтотулат. Токтотуу учурунда stopForeground(bool removeNotification) чакырышы керек, билдирүүнү алып салуу үчүн.

Ишке киргизүү мисалы:

// Уруксат алуу
ActivityCompat.requestPermissions(
    this,
    arrayOf(Manifest.permission.FOREGROUND_SERVICE),
    REQUEST_CODE_FOREGROUND_SERVICE
)

// Уруксат алгандан кийин же ал мурда берилсе
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)

Кызматтын ичинде:

// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    val notification: Notification = createNotification() // Билдирүү түзүүчү метод
    startForeground(NOTIFICATION_ID, notification)
    // Мында кызматтын иши башталат
    return START_STICKY // же башка ылайыктуу флаг
}

override fun onDestroy() {
    stopForeground(true) // Билдирүүнү жок кылуу
    // Ресурстарды бошотуу
    super.onDestroy()
}