Middle
Wat is een achtergrondservice (voorgrondservice) in Android?
sobes.tech AI
Antwoord van AI
De voorgrondservice (foreground service) is een type service in Android dat een verhoogde prioriteit heeft en zichtbaar is voor de gebruiker. Het voert taken uit die waarneembaar zijn voor de gebruiker en niet mogen worden onderbroken om batterij of geheugen te besparen.
Belangrijkste kenmerken:
- Toont een constante melding in het meldingengebied. De gebruiker moet kunnen zien dat de service actief is en er mogelijk mee kunnen interactieren.
- Het systeem is minder geneigd om een voorgrondservice te beëindigen in vergelijking met een normale achtergrondservice of thread vanwege de hoge prioriteit.
- Vereist een speciale toestemming
FOREGROUND_SERVICE. - Wordt gebruikt voor taken zoals muziek afspelen, locatie tracking, realtime gegevens synchronisatie.
Levenscyclus:
- Wordt gestart met
startForegroundService(). - Binnen 5 seconden moet
startForeground(notificationId, notification)worden aangeroepen om de service in de voorgrond te plaatsen. Anders kan het systeem de service stoppen enForegroundServiceDidNotStartInTimeExceptionwerpen. - Wordt gestopt met
stopSelf()ofstopService()vanuit een ander component, of geforceerd door de gebruiker via de melding. Bij stoppen moetstopForeground(bool removeNotification)worden aangeroepen om de melding te verwijderen.
Voorbeeld van starten:
// Permissie verkrijgen
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.FOREGROUND_SERVICE),
REQUEST_CODE_FOREGROUND_SERVICE
)
// In de callback na het verkrijgen van permissie of als permissie al is verleend
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)
Binnen de service:
// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val notification: Notification = createNotification() // Methode om notificatie te maken
startForeground(NOTIFICATION_ID, notification)
// Hier begint de uitvoering van de taak
return START_STICKY // Of een andere geschikte vlag
}
override fun onDestroy() {
stopForeground(true) // Verwijder notificatie bij stoppen
// Resources opruimen
super.onDestroy()
}