Background Execution — a mobilalkalmazás kódjának végrehajtási mechanizmusa, amikor az nem az előtérben van. E mechanizmus nélkül az alkalmazást a rendszer felfüggeszti minimalizáláskor. Az Apple, 2026 adatai szerint az iOS 30 másodpercre korlátozza a háttérben töltött időt, míg az Android rugalmasabb forgatókönyveket tesz lehetővé a WorkManager és Foreground Service segítségével.
Főbb pontok
Background Execution — az alkalmazás azon képessége, hogy folytassa a kód végrehajtását, miután a felhasználó minimalizálta vagy másik alkalmazásra váltott. Különleges mechanizmusok nélkül a mobil operációs rendszer néhány másodpercen belül Suspended (felfüggesztett) állapotba helyezi az alkalmazást, felszabadítva a processzort és a memóriát az aktív alkalmazások számára.
A mobilalkalmazás az életciklus több állapotán megy keresztül: Foreground (aktív), Background (háttérben), Suspended (felfüggesztett) és Terminated (befejezett). Background — az egyetlen állapot, amelyben az alkalmazás látható felület nélkül tud kódot végrehajtani. Az iOS és Android eltérően határozza meg az időtartamot és az engedélyezett műveleteket ebben az állapotban.
A háttérvégrehajtás szükséges az adatszinkronizációs feladatokhoz, tartalomletöltéshez, Push-értesítések feldolgozásához, háttérbeli geolokációhoz és audiolejátszáshoz. Szinkronizáció — a leggyakoribb forgatókönyv: az alkalmazás adatokat küld a szerverre vagy frissítéseket tölt le a felhasználó részvétele nélkül.
A háttérvégrehajtás korlátozásait három tényező okozza: energiafogyasztás, eszközteljesítmény és a felhasználó adatvédelme. A processzor és a rádiómodulok (Wi-Fi, mobiladatok) fogyasztják a legtöbb energiát — minden háttérfolyamat csökkenti az akkumulátor üzemidejét.
A Google kutatásai szerint azok az alkalmazások, amelyek 5 percenként háttérfeladatokat hajtanak végre, napi 20–30%-kal csökkentik az eszköz üzemidejét. Még az optimalizált háttérműveletek is óránkénti gyakorisággal észrevehető hatást gyakorolnak, ha kettőnél több ilyen alkalmazás van.
Minden háttéralkalmazás operatív memóriát foglal. Memóriahiány esetén a rendszer eltávolítja az alkalmazásokat a memóriából, ami újraindítást eredményez a felhasználó visszatérésekor. Az iOS a Jetsam algoritmust használja — a háttérfolyamatok kényszerített megszüntetésének mechanizmusát a memóriakorlát túllépésekor. Az Android hasonló elvvel alkalmazza az LMK-t (Low Memory Killer).
Android 10 és iOS 13 óta a rendszer megköveteli az alkalmazásoktól a háttérmunka céljának deklarálását. Az Android korlátozta a Broadcast Receiver háttérben történő indítását. Az iOS megköveteli a Background Mode megadását a projekt Capabilities részében. A felhasználó bármely alkalmazás számára kikapcsolhatja a háttérvégrehajtást a beállításokban.
| OS | Verzió | Korlátozás | Hatás |
|---|---|---|---|
| Android | 8.0 | IMPLICIT_BROADCAST tiltva | A háttér-Broadcastok 67%-a elromlott |
| Android | 9.0 | Doze javítva | Hálózati hívások korlátozása |
| Android | 12+ | Foreground Service korlátozva | Indítás tiltása a háttérből |
| iOS | 7+ | Background App Refresh | Időszakos frissítési ablakok |
| iOS | 13+ | BGTaskScheduler | Ütemezés a végrehajtás helyett |
Az Android több mechanizmust kínál a háttérvégrehajtáshoz, amelyek mindegyike a saját feladatkategóriáját oldja meg. WorkManager — az ajánlott API elhalasztott és időszakos feladatokhoz. Foreground Service — azonnali végrehajtáshoz látható értesítéssel. JobScheduler — a WorkManager alacsony szintű megfelelője.
WorkManager — az Android Jetpack része, amely biztosítja a háttérfeladatok végrehajtását a készülék újraindítása után is. Az API a hálózati állapot, az akkumulátorszint és a Doze mód figyelembevételével választja ki az optimális végrehajtási időt. A WorkManager API 14+ kompatibilis és leváltja az elavult AlarmManager-t és JobScheduler-t.
Amikor az alkalmazásnak a felhasználó számára látható feladatot kell végrehajtania (zenelejátszás, geolokáció rögzítése), Foreground Service-t használunk. A szolgáltatás állandó értesítést jelenít meg az állapotsorban és magasabb prioritással rendelkezik — a rendszer nem fejezi be a feladat befejezéséig. Android 13-tól kezdve POST_NOTIFICATIONS engedély szükséges.
Android 6.0 óta a készülék inaktivitáskor Doze módba lép. Ebben a módban a hálózati műveletek, a szinkronizáció és a JobScheduler elhalasztásra kerülnek. A WorkManager automatikusan alkalmazkodik a Doze-hoz — a feladatok a legközelebbi Maintenance Window-ban hajtódnak végre, amikor a készülék karbantartás céljából felébred az alvó módból.
Az iOS szigorúbb megközelítést alkalmaz a háttérvégrehajtáshoz. Background App Refresh — az időszakos adatfrissítés fő mechanizmusa. BGTaskScheduler — API a feladatok ütemezéséhez a rendszer állapotának figyelembevételével. Hosszú műveletekhez Background Modes áll rendelkezésre: audio, location, voip, fetch és processing.
Background App Refresh lehetővé teszi az alkalmazás számára, hogy 15–30 percenként felébresszen adatszinkronizáció céljából. Az ébredési idő a felhasználó viselkedésétől függ — a rendszer elemzi, hogy milyen gyakran nyitja meg az alkalmazást. A felhasználó kikapcsolhatja ezt a funkciót egyes alkalmazásoknál a Settings — General — Background App Refresh menüpontban.
iOS 13 óta a BGTaskScheduler váltotta fel az elavult performFetch és beginBackgroundTask funkciókat. Az alkalmazás azonosítóval és minimális intervallummal regisztrálja a feladatokat, a rendszer pedig maga határozza meg az optimális végrehajtási időt. A feladatok két típusra oszlanak: BGProcessingTask (hosszú, 10+ perc) és BGAppRefreshTask (rövid, legfeljebb 30 másodperc).
Az iOS korlátozott időt biztosít az alkalmazásnak a háttérfeladat végrehajtásához — legfeljebb 30 másodpercet a BGAppRefreshTask és legfeljebb 10 percet a BGProcessingTask számára. A korlát túllépése után a rendszer kényszerítetten befejezi a feladatot. A fejlesztőnek meg kell hívnia a lejárati kezelőt (expiration handler) a közbenső eredmények mentéséhez.
Vizsgáljuk meg a háttérvégrehajtás gyakorlati megvalósítását Androidon a WorkManager segítségével. Példa adatszinkronizációra 8 óránként a hálózati állapot figyelembevételével. A WorkManager garantálja a feladat végrehajtását a készülék újraindítása után is.
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
return try {
syncDataToServer()
Log.d("Sync", "Adatok szinkronizálva")
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Periodikus feladat indítása 8 óránként
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresCharging(false)
.build()
val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
8, TimeUnit.HOURS
).setConstraints(constraints).build()
WorkManager.getInstance(context).enqueue(syncRequest)
A felhasználó számára látható hosszú műveletekhez használjon Foreground Service-t. Példa fájl letöltésére az értesítésben megjelenő előrehaladással. A szolgáltatás meghívja a startForeground()-t egy el nem utasítható értesítéssel. A letöltés befejezésekor — stopForeground(STOP_FOREGROUND_REMOVE).
class DownloadService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, id: Int): Int {
startForeground(NOTIFICATION_ID, createNotification())
downloadFile()
stopForeground(STOP_FOREGROUND_REMOVE)
stopSelf()
return START_NOT_STICKY
}
private fun createNotification(): Notification {
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Fájl letöltése")
.setSmallIcon(android.R.drawable.ic_download)
.build()
}
}
iOS-en a háttérvégrehajtás a BGTaskScheduler-en keresztül van konfigurálva. Példa a tartalomfrissítési feladat regisztrálására és végrehajtására. Az alkalmazásnak regisztrálnia kell a feladat azonosítóját az Info.plist-ben, és meg kell hívnia a submit-et a feladat ütemezésekor.
import BackgroundTasks
func registerBackgroundTask() {
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.app.refresh",
using: nil
) { task in
self.handleAppRefresh(task: task as! BGAppRefreshTask)
}
}
func scheduleAppRefresh() {
let request = BGAppRefreshTaskRequest(
identifier: "com.app.refresh"
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)
}
func handleAppRefresh(task: BGAppRefreshTask) {
scheduleAppRefresh()
task.expirationHandler = {
// Közbenső adatok mentése
cacheCurrentState()
}
fetchLatestData {
task.setTaskCompleted(success: true)
}
}
Hosszú műveletekhez (gyorsítótár tisztítása, adatfeldolgozás) használjon BGProcessingTask-ot. A rendszer legfeljebb 10 percet ad a végrehajtásra. Csak akkor indul, ha a készülék töltőn van és Wi-Fi-hez csatlakozik. Külön azonosítót igényel az Info.plist-ben és regisztrációt a register(forTaskWithIdentifier:) segítségével.
func scheduleProcessing() {
let request = BGProcessingTaskRequest(
identifier: "com.app.cleanup"
)
request.requiresExternalPower = true
request.requiresNetworkConnectivity = true
request.earliestBeginDate = Date(timeIntervalSinceNow: 24 * 60 * 60)
try? BGTaskScheduler.shared.submit(request)
}
Az Android és iOS gyökeresen különbözik a háttérvégrehajtás filozófiájában. Android rugalmas eszközöket kínál nagy kontrollal, de megköveteli a fejlesztőtől a megfelelő API kiválasztását. iOS korlátozza a lehetőségeket, de stabil teljesítményt és autonómiát garantál a felhasználó számára.
| Szempont | Android | iOS |
|---|---|---|
| Ajánlott API | WorkManager | BGTaskScheduler |
| Max. feladatidő | Korlátlan (Foreground Service) | 30 mp / 10 perc (processing) |
| Időszakos feladatok | Igen, PeriodicWorkRequest segítségével | Igen, BGAppRefreshTask segítségével |
| Végrehajtási garancia | Igen, még újraindítás után is | Nem — a rendszer dönti el, mikor |
| Hálózati hozzáférés háttérben | Doze mód által korlátozva | URLSession segítségével background config |
| Geolokáció háttérben | Foreground Service + engedély | Background Mode location + NSLocation |
| Audio háttérben | Foreground Service média értesítéssel | Background Mode audio + AVAudioSession |
A WorkManager azokhoz a feladatokhoz optimális, amelyeket az alkalmazás állapotától függetlenül végre kell hajtani: adatszinkronizáció, analitika küldése, sorok feldolgozása. Az API garantálja a végrehajtást a készülék kikapcsolása után is — a feladat újraütemezésre kerül a rendszerindítást követően.
A BGTaskScheduler azokhoz a feladatokhoz alkalmas, amelyeket a rendszer bármikor végrehajthat: új tartalom letöltése, widgetek frissítése, gyorsítótár tisztítása. Nem alkalmas sürgős műveletekhez — a rendszer elhalasztja a feladatot, ha a készülék Doze módban van vagy alacsony az akkumulátor szintje.
Gyakran Ismételt Kérdések
Background Execution — általános fogalom, amely bármely háttérben végrehajtott kódot leír. Background Modes — egy konkrét iOS mechanizmus, amely lehetővé teszi az alkalmazás számára bizonyos típusú háttérműveletek végrehajtását: audio, geolokáció, VoIP, fetch. Az Android hasonló megközelítést alkalmaz a Foreground Service típusain keresztül.
iOS-en ez a BGAppRefreshTask szabványos korlátozása. A rendszer kényszerítetten befejezi a feladatot a határidő lejárta után. Androidon hasonló helyzet akkor fordul elő, amikor az alkalmazás nem használ WorkManager-t vagy Foreground Service-t — a szokásos Service-t a rendszer befejezi a háttérbe kerülés után.
Androidon használjon WorkManager-t — garantálja a végrehajtást még újraindítás után is. iOS-en a végrehajtás nem garantálható — a rendszer maga dönti el, mikor indítja el a feladatot. Az egyetlen garanciális lehetőség — a Background Modes (audio, location) használata látható jelzővel a felhasználó számára.
iOS-en hívja meg a UIApplication.shared.backgroundRefreshStatus metódust — status .available, .denied vagy .restricted. Androidon használja a PowerManager.isIgnoringBatteryOptimizations() függvényt az akkumulátor-optimalizálás alóli kivétel ellenőrzéséhez. A WorkManager esetében nincs szükség ellenőrzésre — az API maga kezeli a rendszer korlátozásait.
Push-értesítések — a fő mechanizmus a műveletek háttérkód nélküli elindításához. iOS-en elérhető a PushKit VoIP-hez és a Silent Push az adatfrissítéshez. Androidon — High Priority FCM és Notification Trampoline. WebSocket-ek Foreground Service-en keresztül — alternatíva a valós idejű alkalmazásokhoz.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is