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
)
// У колбеку після отримання права або якщо право вже є
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()
}