Middle
Co je to služba na pozadí (služba na popředí) v Androidu?
sobes.tech AI
Odpověď od AI
Servis v popředí (foreground service) je typ služby v Androidu, která má vyšší prioritu a je viditelná uživateli. Provádí úkoly, které jsou pro uživatele patrné, a neměly by být přerušovány za účelem úspory baterie nebo paměti.
Klíčové vlastnosti:
- Zobrazuje trvalé oznámení v oznamovací oblasti. Uživatel by měl vidět, že služba běží, a případně s ní komunikovat.
- Systém má menší pravděpodobnost ukončení služby v popředí ve srovnání s běžnou službou na pozadí nebo vláknem, díky její vysoké prioritě.
- Vyžaduje speciální oprávnění
FOREGROUND_SERVICE. - Používá se pro úkoly jako přehrávání hudby, sledování polohy, synchronizace dat v reálném čase.
Životní cyklus:
- Spouští se pomocí
startForegroundService(). - Během 5 sekund je nutné zavolat
startForeground(notificationId, notification), aby se služba přesunula do popředí. Jinak může systém službu ukončit a vyhoditForegroundServiceDidNotStartInTimeException. - Ukončuje se pomocí
stopSelf()nebostopService()z jiného komponentu, nebo nuceně uživatelem přes oznámení. Při ukončení je nutné zavolatstopForeground(bool removeNotification)pro odstranění oznámení.
Příklad spuštění:
// Získání oprávnění
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.FOREGROUND_SERVICE),
REQUEST_CODE_FOREGROUND_SERVICE
)
// V callbacku po získání oprávnění nebo pokud již je
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)
Uvnitř služby:
// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val notification: Notification = createNotification() // Metoda pro vytvoření oznámení
startForeground(NOTIFICATION_ID, notification)
// Zde začíná vykonávání úkolu služby
return START_STICKY // Nebo jiný vhodný příznak
}
override fun onDestroy() {
stopForeground(true) // Odstranit oznámení při ukončení
// Uvolnění zdrojů
super.onDestroy()
}