Sobes.tech
Middle

Kas yra foninė paslauga (pirmojo plano paslauga) Android?

sobes.tech AI

Atsakymas iš AI

Fono paslauga (foreground service) yra Android tipo paslauga, turinti padidintą prioritetą ir matoma naudotojui. Ji vykdo užduotis, kurios yra pastebimos naudotojui ir neturėtų būti nutrauktos taupant bateriją ar trūkstant atminties.

Pagrindinės savybės:

  • Nuolatinis pranešimas rodomas pranešimų srityje. Naudotojas turi galėti matyti, kad paslauga veikia, ir galbūt su ja sąveikauti.
  • Sistema mažiau tikėtina, kad nutrauks fono paslaugą, palyginti su įprasta fono paslauga ar srautu, dėl jos aukšto prioriteto.
  • Reikalauja specialios leidimo FOREGROUND_SERVICE.
  • Naudojama muzikos grojimui, vietovės stebėjimui, duomenų sinchronizacijai realiuoju laiku.

Gyvenimo ciklas:

  1. Pradedama naudojant startForegroundService().
  2. Per 5 sekundes reikia iškviesti startForeground(notificationId, notification), kad paslauga būtų perkelta į foninį režimą. Kitaip sistema gali sustabdyti paslaugą ir mesti ForegroundServiceDidNotStartInTimeException.
  3. Sustabdomas naudojant stopSelf() arba stopService() iš kito komponento arba priverstinai naudotojo per pranešimą. Sustabdžius, reikia iškviesti stopForeground(bool removeNotification) pranešimo pašalinimui.

Pavyzdys:

// Leidimo gavimas
ActivityCompat.requestPermissions(
    this,
    arrayOf(Manifest.permission.FOREGROUND_SERVICE),
    REQUEST_CODE_FOREGROUND_SERVICE
)

// Po leidimo gavimo arba jei leidimas jau yra
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)

Paslauga:

// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    val notification: Notification = createNotification() // Metodas pranešimui sukurti
    startForeground(NOTIFICATION_ID, notification)
    // Čia prasideda paslaugos užduoties vykdymas
    return START_STICKY // Arba kitas tinkamas žymeklis
}

override fun onDestroy() {
    stopForeground(true) // Pašalinti pranešimą
    // Išlaisvinti išteklius
    super.onDestroy()
}