Middle
Какво е фоновата услуга (услуга на преден план) в Android?
sobes.tech AI
Отговор от AI
Фоновият сервис (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
)
// В callback след получаване на разрешението или ако вече е налично
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()
}