Middle
Šta je servis u pozadini (servis u prvom planu) u Androidu?
sobes.tech АИ
Одговор од АИ
Фонови сервис (foreground service) је тип сервиса у Android-у који има повећани приоритет и видљив је кориснику. Он извршава задатке који су приметни за корисника и не смеју бити прекинути ради уштеде батерије или меморије.
Кључне карактеристике:
- Приказује константно обавештење у области обавештења. Корисник треба да може видети да је сервис покренут и потенцијално са њим комуницирати.
- Систем је мање вероватно да ће прекинути сервис у првом плану у поређењу са обичним позадинским сервисом или потоком због његовог високог приоритета.
- Захтева посебно одобрење
FOREGROUND_SERVICE. - Користи се за задатке као што су репродукција музике, праћење локације, синхронизација података у реалном времену.
Животни циклус:
- Покреће се помоћу
startForegroundService(). - У року од 5 секунди, потребно је позвати
startForeground(notificationId, notification)да би се сервис прешао у први план. У супротном, систем може зауставити сервис и изазватиForegroundServiceDidNotStartInTimeException. - Зауставља се помоћу
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()
}