Background Execution у мобилном развоју — суштина, ограничења и принципи рада

Аутор: IT Sectr Објављено: 2026-03-26 Време читања: 9 мин

Background Execution — механизам извршавања кода мобилне апликације у тренутку када она није у предњем плану. Без овог механизма апликација се зауставља од стране система при минимизацији. Према подацима Apple, 2026, iOS ограничава позадинско време на 30 секунди, док Android омогућава флексибилније сценарије кроз WorkManager и Foreground Service.

Главно

  • Background Execution — извршавање кода апликације када је скувана или неактивна.
  • iOS — строга ограничења: 30 секунди за задатке, строги Background Modes и App Refresh.
  • Android — WorkManager, Foreground Service, Scheduling и Doze mode са различитим ограничењима.
  • Потрошња енергије — главни разлог ограничења: позадински процеси скраћују време рада уређаја.
  • Приватност — од Android 8 и iOS 13, системи захтевају јасне дозволе за позадински рад.

Шта је Background Execution у мобилним апликацијама?

Background Execution — способност апликације да настави извршавање кода након што је корисник минимизира или пређе на другу апликацију. Без посебних механизама, мобилни ОС преводи апликацију у стање Suspended (заустављено) након неколико секунди одласка у позадину, ослобађајући процесор и меморију за активне апликације.

Стања апликације у позадини

Мобилна апликација пролази кроз неколико стања животног циклуса: Foreground (активно), Background (у позадини), Suspended (заустављено) и Terminated (завршено). Background — једино стање у којем апликација може извршавати код без видљивог интерфејса. iOS и Android различито одређују трајање и доступне операције у овом стању.

Основни сценарији употребе

Позадинско извршавање је неопходно за задатке синхронизације података, преузимања садржаја, обраду Push обавештења, геолокацију у позадини и репродукцију звука. Синхронизација — најчешћи сценарио: апликација шаље податке на сервер или преузима ажурирања без учешћа корисника.

  • Синхронизација — учитавање и отпремање података при промени мреже.
  • Геолокација — праћење локације у фитнес тракерима и навигацијама.
  • Медији — репродукција звука и видеа у позадини (музика, подкасти).
  • Обавештења — обрада Push и локалних обавештења.
  • Преузимање — преузимање великих датотека (подкасти, видео) у позадини.

Зашто мобилни ОС ограничавају позадинско извршавање

Ограничења позадинског извршавања условљена су три фактора: потрошња енергије, перформансе уређаја и приватност корисника. Процесор и радио-модули (Wi-Fi, мобилни подаци) троше највише енергије — сваки позадински процес скраћује време рада батерије.

Потрошња енергије и аутономија

Истраживања Google показују да апликације које извршавају позадинске задатке сваких 5 минута смањују време рада уређаја за 20–30% дневно. Чак и оптимизоване позадинске операције са учесталошћу једном на сат имају приметан утицај ако постоји више од две такве апликације.

Оперативна меморија и перформансе

Свака позадинска апликација заузима оперативну меморију. При њеном недостатку, систем истоварује апликације из меморије, што доводи до поновног покретања при повратку корисника. iOS користи алгоритам Jetsam — механизам принудног завршавања позадинских процеса при прекорачењу лимита меморије. Android примењује LMK (Low Memory Killer) са сличним принципом.

Приватност корисника

Почевши од Android 10 и iOS 13, систем захтева од апликација да декларишу сврху позадинског рада. Android је увео ограничење покретања Broadcast Receiver у позадини. iOS захтева навођење Background Mode у Capabilities пројекта. Корисник може онемогућити позадинско извршавање за било коју апликацију у подешавањима.

ОСВерзијаОграничењеУтицај
Android8.0IMPLICIT_BROADCAST забрањен67% позадинских Broadcast-ова покварено
Android9.0Doze побољшанОграничење мрежних позива
Android12+Foreground Service ограниченЗабрана покретања из позадине
iOS7+Background App RefreshПериодични прозори ажурирања
iOS13+BGTaskSchedulerПланирање уместо извршавања

Background Execution на Android-у: WorkManager и Foreground Service

Android пружа неколико механизама за позадинско извршавање, од којих сваки решава своју категорију задатака. WorkManager — препоручени API за одложене и периодичне задатке. Foreground Service — за тренутно извршавање са видљивим обавештењем. JobScheduler — нижи ниво аналог WorkManager-а.

WorkManager — универзално решење

WorkManager — део Android Jetpack, обезбеђује извршавање позадинских задатака са гаранцијом завршетка чак и након поновног покретања уређаја. API бира оптимално време извршавања узимајући у обзир стање мреже, ниво батерије и Doze режим. WorkManager је компатибилан са API 14+ и замењује застареле AlarmManager и JobScheduler.

Foreground Service — за дуготрајне операције

Када апликација треба да изврши задатак видљив кориснику (репродукција музике, снимање геолокације), користи се Foreground Service. Сервис приказује стално обавештење у статусној траци и има виши приоритет — систем га неће завршити до краја задатка. Почевши од Android 13, потребна је дозвола POST_NOTIFICATIONS.

Doze Mode и оптимизација батерије

Почевши од Android 6.0, уређај прелази у Doze режим при неактивности. У овом режиму се одлажу мрежне операције, синхронизација и JobScheduler. WorkManager се аутоматски прилагођава Doze-у — задаци се извршавају у најближем Maintenance Window-у, када уређај изађе из сна ради одржавања.

Background Execution на iOS-у: Background Tasks и App Refresh

iOS користи строжи приступ позадинском извршавању. Background App Refresh — главни механизам периодичног ажурирања података. BGTaskScheduler — API за планирање задатака узимајући у обзир стање система. За дуготрајне операције доступни су Background Modes: audio, location, voip, fetch и processing.

Background App Refresh

Background App Refresh омогућава апликацији да се буди сваких 15–30 минута ради синхронизације података. Време буђења зависи од понашања корисника — систем анализира колико често отвара апликацију. Корисник може онемогућити ову функцију за појединачне апликације у Settings — General — Background App Refresh.

BGTaskScheduler — савремени приступ

Почевши од iOS 13, BGTaskScheduler је заменио застареле performFetch и beginBackgroundTask. Апликација региструје задатке са идентификатором и минималним интервалом, а систем сам одређује оптимално време извршавања. Задаци се деле на два типа: BGProcessingTask (дуготрајни, 10+ минута) и BGAppRefreshTask (кратки, до 30 секунди).

Ограничење времена извршавања

iOS додељује апликацији ограничено време за извршавање позадинског задатка — до 30 секунди за BGAppRefreshTask и до 10 минута за BGProcessingTask. По истеку лимита, систем принудно завршава задатак. Програмер мора позвати хендлер завршетка (expiration handler) за чување привремених резултата.

Примери кода: Android WorkManager

Размотримо практичну имплементацију позадинског извршавања на Android-у помоћу WorkManager-а. Пример синхронизације података сваких 8 сати узимајући у обзир стање мреже. WorkManager гарантује извршавање задатка чак и након поновног покретања уређаја.

kotlin
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        return try {
            syncDataToServer()
            Log.d("Sync", "Подаци синхронизовани")
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

// Покретање периодичног задатка сваких 8 сати
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)

Foreground Service са обавештењем

За дуготрајне операције видљиве кориснику, користите Foreground Service. Пример преузимања датотеке са напретком у обавештењу. Сервис позива startForeground() са обавештењем које се не може одбацити. При завршетку преузимања — stopForeground(STOP_FOREGROUND_REMOVE).

kotlin
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("Преузимање датотеке")
            .setSmallIcon(android.R.drawable.ic_download)
            .build()
    }
}

Примери кода: iOS BGTaskScheduler

На iOS-у позадинско извршавање се конфигурише кроз BGTaskScheduler. Пример регистрације и извршавања задатка ажурирања садржаја. Апликација мора регистровати идентификатор задатка у Info.plist и позвати submit у тренутку када задатак треба да буде планиран.

swift
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 = {
        // Сачувај привремене податке
        cacheCurrentState()
    }
    fetchLatestData {
        task.setTaskCompleted(success: true)
    }
}

Background Processing Task

За дуготрајне операције (чишћење кеша, обрада података) користите BGProcessingTask. Систем даје до 10 минута за извршавање. Покреће се само када је уређај на пуњачу и повезан на Wi-Fi. Захтева посебан идентификатор у Info.plist и регистрацију кроз register(forTaskWithIdentifier:).

swift
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)
}

Поређење приступа Android и iOS

Android и iOS се коренито разликују у филозофији позадинског извршавања. Android пружа флексибилне алате са великом контролом, али захтева од програмера правилан избор API-ја. iOS ограничава могућности, али гарантује стабилне перформансе и аутономију за корисника.

КритеријумAndroidiOS
Препоручени APIWorkManagerBGTaskScheduler
Макс. време задаткаНеограничено (Foreground Service)30 с / 10 мин (processing)
Периодични задациДа, кроз PeriodicWorkRequestДа, кроз BGAppRefreshTask
Гаранција извршавањаДа, чак и након рестартаНе — систем одлучује када
Мрежни приступ у позадиниОграничен Doze режимомКроз URLSession са background config
Геолокација у позадиниForeground Service + дозволаBackground Mode location + NSLocation
Аудио у позадиниForeground Service са медија обавештењемBackground Mode audio + AVAudioSession

Када изабрати Android WorkManager

WorkManager је оптималан за задатке који морају да се изврше без обзира на стање апликације: синхронизација података, слање аналитике, обрада редова. API гарантује извршавање чак и након искључивања уређаја — задатак се поново планира након покретања.

Када изабрати iOS BGTaskScheduler

BGTaskScheduler је погодан за задатке које систем може извршити у било које погодно време: преузимање новог садржаја, ажурирање виџета, чишћење кеша. Није погодан за хитне операције — систем одлаже задатак ако је уређај у Doze-у или је низак ниво батерије.

Често постављана питања

Која је разлика између Background Execution и Background Modes?

Background Execution — општи појам који описује сваки код који се извршава у позадини. Background Modes — конкретан механизам iOS-а који омогућава апликацији да извршава одређене типове позадинских операција: аудио, геолокација, VoIP, fetch. Android користи сличан приступ кроз типове Foreground Service.

Зашто моја апликација престаје након 30 секунди у позадини?

На iOS ово је стандардно ограничење за BGAppRefreshTask. Систем принудно завршава задатак по истеку лимита. На Android-у слична ситуација настаје када апликација не користи WorkManager или Foreground Service — обични Service се завршава од стране система након одласка у позадину.

Како гарантовати извршавање задатка на обе платформе?

На Android-у користите WorkManager — гарантује извршавање чак и након рестарта. На iOS-у се извршавање не може гарантовати — систем сам одлучује када да покрене задатак. Једини начин гаранције — коришћење Background Modes (audio, location) са видљивим индикатором за корисника.

Како проверити да ли је позадинско извршавање дозвољено?

На iOS-у позовите UIApplication.shared.backgroundRefreshStatus — статус .available, .denied или .restricted. На Android-у користите PowerManager.isIgnoringBatteryOptimizations() за проверу изузетка од оптимизације батерије. За WorkManager проверa није потребна — API сам обрађује ограничења система.

Које алтернативе позадинском извршавању постоје?

Push обавештења — главни механизам за окидање радњи без позадинског кода. На iOS-у су доступни PushKit за VoIP и Silent Push за ажурирање података. На Android-у — High Priority FCM и Notification Trampoline. WebSockets кроз Foreground Service — алтернатива за real-time апликације.

Закључак

  • Background Execution — механизам извршавања кода при скуваној апликацији, критично важан за синхронизацију, преузимање и обавештења.
  • Android нуди WorkManager (гарантовано извршавање), Foreground Service (дуготрајни видљиви задаци) и ограничења Doze режима.
  • iOS користи BGTaskScheduler (планирање), Background App Refresh (периодично ажурирање) и Background Modes за медије и геолокацију.
  • Потрошња енергије — главни разлог ограничења: позадински процеси без оптимизације смањују време рада уређаја за 20–30%.
  • Приватност — обе платформе захтевају јасне дозволе (Android POST_NOTIFICATIONS, iOS Background Modes) и обавештавање корисника.
  • WorkManager — једини API са гаранцијом извршавања након поновног покретања уређаја, BGTaskScheduler се ослања на одлуку система.
  • Користите Foreground Service на Android-у и Background Modes на iOS-у за дуготрајне операције видљиве кориснику у статусној траци.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође