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:
- A
startForegroundService()segítségével indítják. - 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, ésForegroundServiceDidNotStartInTimeException-t dobhat. - A
stopSelf()vagystopService()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 astopForeground(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()
}