Sobes.tech
Middle

Mi az a háttérszolgáltatás (első terv szolgáltatás) az Androidban?

sobes.tech MI

Válasz az MI-től

Az Android rendszerben az elsődleges szolgáltatás (foreground service) egy olyan típusú szolgáltatás, amely magasabb prioritással rendelkezik, és látható a felhasználó számára. Feladatai olyanok, amelyek észlelhetők a felhasználó számára, és nem szabad megszakítani őket az akkumulátor vagy a memória takarékossága érdekében.

Fő jellemzők:

  • Állandó értesítést jelenít meg az értesítési sávban. A felhasználónak látnia kell, hogy a szolgáltatás fut, és esetleg interakcióba léphet vele.
  • A rendszer kevésbé valószínű, hogy megszakítja az elsődleges szolgáltatást, mint egy normál háttérszolgáltatást vagy szálat, magas prioritásának köszönhetően.
  • Külön engedélyt igényel FOREGROUND_SERVICE.
  • Olyan feladatokra használják, mint zenelejátszás, helymeghatározás követése, valós idejű adatszinkronizálás.

Életciklus:

  1. A startForegroundService() segítségével indítják.
  2. 5 másodpercen belül hívni kell a startForeground(notificationId, notification)-t, hogy a szolgáltatás elsődleges módba kerüljön. Ellenkező esetben a rendszer leállíthatja a szolgáltatást, és ForegroundServiceDidNotStartInTimeException-t dobhat.
  3. A stopSelf() vagy stopService() segítségével, vagy a felhasználó által a értesítésen keresztül kényszerítve állítható le. A leállításkor hívni kell a stopForeground(bool removeNotification)-t az értesítés eltávolításához.

Indítási példa:

// Engedély kérés
ActivityCompat.requestPermissions(
    this,
    arrayOf(Manifest.permission.FOREGROUND_SERVICE),
    REQUEST_CODE_FOREGROUND_SERVICE
)

// Az engedély megszerzése után vagy ha már megvan
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)

A szolgáltatásban:

// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    val notification: Notification = createNotification() // Értesítés létrehozó metódus
    startForeground(NOTIFICATION_ID, notification)
    // Itt kezdődik a szolgáltatás feladata
    return START_STICKY // Vagy más megfelelő zászló
}

override fun onDestroy() {
    stopForeground(true) // Értesítés eltávolítása leállításkor
    // Erőforrások tisztítása
    super.onDestroy()
}