BGTaskScheduler: шта је то, позадински задаци iOS

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

BGTaskScheduler — је Apple-ов фрејмворк за планирање и извршавање позадинских задатака у апликацијама за iOS 13 и новије. Замијенио је застарјеле Background Fetch и performFetch, пружајући јединствени АПИ за рад са позадинским операцијама. Према Apple Developer Documentation, 2026, фрејмворк укључује два типа задатака: BGProcessingTask за дуготрајне операције и BGAppRefreshTask за кратко ажурирање садржаја.

Главне тачке

  • BGTaskScheduler — је фрејмворк за iOS 13+ за управљање позадинским задацима који је замијенио стари Background Fetch.
  • BGAppRefreshTask — кратки позадински задатак до 30 секунди за ажурирање садржаја.
  • BGProcessingTask — дуготрајни позадински задатак до неколико минута за ресурсно захтјевне операције.
  • Регистрација задатака се врши у Info.plist преко идентификатора и у коду преко handleTasks.
  • Систем аутоматски одређује оптимално вријеме покретања задатака на основу понашања корисника.

Шта је BGTaskScheduler?

BGTaskScheduler — је системски Apple-ов фрејмворк, представљен у iOS 13, који централизовано управља извршавањем позадинских задатака. Прије његовог појављивања, програмери су користили UIApplication backgroundTasks, performFetch и обраду догађаја у appDelegate, што је доводило до фрагментације кода и непредвидивог понашања.

Фрејмворк ради по принципу одложеног планирања: апликација региструје задатке са јединственим идентификаторима, а iOS сам одређује оптимални тренутак за њихово извршавање. Систем узима у обзир ниво батерије, активност корисника, стање мреже и друге факторе.

Основне могућности укључују рад и са кратким и са дуготрајним позадинским операцијама. За разлику од AlarmManager-а у Android-у, BGTaskScheduler не гарантује тачно вријеме извршавања — систем задржава право да одложи задатак ако су услови неповољни.

Како BGTaskScheduler ради у iOS-у?

BGTaskScheduler користи архитектуру засновану на хендлерима. Апликација региструје хендлер за сваки тип задатка, а систем га позива када дође одговарајући тренутак. Сам фрејмворк не извршава задатак директно — само обавјештава апликацију да је вријеме да га покрене.

Процес регистрације задатка

Регистрација почиње са декларисањем идентификатора задатка у Info.plist преко низа BGTaskSchedulerPermittedIdentifiers. Затим се у коду апликације позива метод registerHandler(forTaskWithIdentifier:) са затварачем-хендлером.

swift
import BackgroundTasks

let taskID = "com.example.app.refresh"

BGTaskScheduler.shared.registerHandler(
    forTaskWithIdentifier: taskID,
    using: DispatchQueue.global()
) { task in
    task.expirationHandler = {
        // позива се при принудном завршетку
    }
    processBackgroundTask(task as! BGAppRefreshTask)
}

Планирање извршавања

Након регистрације, апликација мора експлицитно затражити извршавање задатка преко submitTaskRequest. Захтјев садржи идентификатор задатка и датум најранијег могућег покретања. Систем чува захтјев и обрађује га када сматра да су услови одговарајући.

swift
let request = BGAppRefreshTaskRequest(
    identifier: taskID
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)

do {
    try BGTaskScheduler.shared.submit(request)
} catch {
    print("Грешка планирања: \(error)")
}

Типови позадинских задатака BGTaskScheduler

BGTaskScheduler пружа два основна типа задатака, од којих је сваки намијењен за свој сценариј коришћења. Избор одговарајућег типа директно утиче на вјероватноћу успјешног извршавања задатка од стране система.

BGAppRefreshTask

BGAppRefreshTask је намијењена за кратко ажурирање садржаја у позадини: преузимање нових података, синхронизација са сервером, ажурирање виџета. Вријеме извршавања је ограничено на 30 секунди, након чега систем присилно завршава задатак. Овај тип задатака се извршава чешће од BGProcessingTask и има већи приоритет.

BGProcessingTask

BGProcessingTask је намијењена за дуже операције: обрада медијских датотека, индексирање Core Data података, прављење резервних копија. Задатак може трајати до неколико минута, али систем га покреће рјеђе и само под повољним условима — прикључење на напајање, стабилан Wi-Fi и ниско оптерећење уређаја.

ПараметарBGAppRefreshTaskBGProcessingTask
Временско ограничење30 секундинеколико минута
Учесталост покретањависоканиска
Условибило којинапајање + Wi-Fi
Захтијева напајањенепрепоручује се
Примјеражурирање токаобрада видеа

Регистрација и планирање задатака

Исправна регистрација је обавезан услов за рад BGTaskScheduler-а. Ако задатак није регистрован у Info.plist-у, систем ће игнорисати сваки захтјев за његово извршавање.

Регистрација у Info.plist-у

У датотеку Info.plist додаје се низ BGTaskSchedulerPermittedIdentifiers са списком текстуалних идентификатора. Сваки идентификатор мора бити јединствен у оквиру апликације. Apple препоручује коришћење обрнуте нотације домена.

xml
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
    <string>com.example.app.refresh</string>
    <string>com.example.app.processing</string>
</array>

Планирање и отказивање

За планирање се користи метод submitTaskRequest. Ако задатак више није потребан, може се отказати преко cancelTaskRequest или cancelAllTaskRequests. Систем аутоматски отказује задатке приликом брисања апликације или ресетовања података.

Праћење стања задатака

BGTaskScheduler пружа могућност праћења стања планираних задатака преко getPendingTaskRequests. Овај метод враћа листу свих активних захтјева са информацијама о њиховом типу, идентификатору и earliestBeginDate. За сваки захтјев се може провјерити да ли је већ извршен или отказан и донијети одлуку о поновном планирању.

Важно је напоменути да систем не пружа директни повратни позив о успјешности извршавања позадинског задатка — хендлер сам мора пријавити резултат преко својстава задатка. setTaskCompleted омогућава означавање задатка као успјешно завршеног, након чега систем може покренути сљедећи планирани задатак овог типа. Ако задатак није позвао setTaskCompleted, систем га сматра завршеним по истеку времена или при принудном завршетку.

За дијагностику проблема препоручује се коришћење OSLog у хендлеру и преглед логова преко Console.app на Mac-у. Apple такође пружа алат MetricKit за анализу перформанси позадинских задатака — он прикупља податке о времену извршавања, потрошњи енергије и учесталости покретања, који се могу користити за оптимизацију.

swift
// Отказивање конкретног задатка
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)

// Отказивање свих задатака
BGTaskScheduler.shared.cancelAllTaskRequests()

// Провера планираних задатака
BGTaskScheduler.shared.getPendingTaskRequests { requests in
    print("Планирано \(requests.count) задатака")
}

Ограничења и препоруке

BGTaskScheduler намеће строга ограничења на позадински рад. Систем може одложити задатак на неодређено вријеме ако су услови неповољни. Програмер мора разумјети да фрејмворк није намијењен за задатке у реалном времену.

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

Да би се повећала вјероватноћа извршавања, препоручује се постављање earliestBeginDate не раније од 1 сат за BGProcessingTask и 15 минута за BGAppRefreshTask. Такође је важно обрадити expirationHandler — ако се задатак не уклапа у лимит, систем позива овај хендлер за исправно завршавање. Поновно планирање треба да се обавља унутар самог хендлера како би се одржао континуирани циклус позадинског рада.

Још једно важно ограничење односи се на мрежне захтјеве. BGTaskScheduler не гарантује постојање активне мрежне везе током извршавања задатка. Апликација мора самостално провјеравати доступност мреже преко NWPathMonitor-а и одложити обраду ако веза не постоји. Ово се разликује од Android JobScheduler-а који може активирати задатак само при повезивању на мрежу одређеног типа. У пракси, програмери често комбинују BGTaskScheduler са позадинским УРЛ сесијама NSURLSession за поуздано преузимање података.

Компатибилност са macOS и watchOS

Почевши од macOS Catalina, BGTaskScheduler је доступан и на Mac-у. Ово омогућава креирање међуплатформских позадинских задатака за UIKit апликације које се покрећу на Apple Silicon. На watchOS-у фрејмворк ради ограничено — доступни су само кратки BGAppRefreshTask за ажурирање компликација и синхронизацију података са iPhone-ом. Програмери морају узети у обзир разлике платформи при планирању позадинске архитектуре.

Алати за отклањање грешака и дијагностику

За отклањање грешака у BGTaskScheduler-у, Apple пружа неколико алата. Команда e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] у lldb-у присилно покреће позадински задатак, занемарујући системска ограничења. У Xcode-у је доступна заставица Simulate Background Fetch у менију Debug, која емулира кратко позадинско ажурирање. За анализу перформанси користи се MetricKit — он прикупља информације о учесталости покретања, трајању извршавања и потрошњи енергије сваког задатка. Ови подаци помажу у оптимизацији учесталости планирања и одабиру исправног типа задатка.

У пракси, BGTaskScheduler је добар за ажурирање података виџета, синхронизацију iCloud-а, обраду push обавијештења са садржајем и индексирање Spotlight претраге. Није погодан за слање аналитике у реалном времену, апликације за ћаскање или било које задатке који захтијевају тренутно извршавање.

Ресурси и документација Apple-а

За продубљено проучавање BGTaskScheduler-а, Apple препоручује званичну WWDC документацију: сесија „Advances in Background Tasks” (2020) покрива миграцију са застарјелих API-ја, а „Background Tasks in Practice” (2021) садржи стварне случајеве коришћења. Такође је користан одјељак Energy Efficiency Guide, у којем је описано како се фрејмворк уклапа у општу стратегију уштеде енергије Apple-а. Примјери кода су доступни у званичном репозиторијуму Apple Developer на GitHub-у са комплетним пројектима за iOS и macOS.

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

По чему се BGTaskScheduler разликује од Background Fetch-а у iOS 12?

Background Fetch је био ограничен на један позадински задатак по апликацији и није имао механизам приоритета. BGTaskScheduler подржава више задатака различитих типова, пружа јединствени API и аутоматско управљање енергијом.

Колико позадинских задатака се може регистровати у BGTaskScheduler-у?

Apple не поставља експлицитно ограничење на број регистрованих идентификатора, али се у пракси препоручује коришћење не више од 5–10 задатака. Већи број смањује вјероватноћу извршавања сваког конкретног задатка због конкуренције за системске ресурсе.

Како отклонити грешке у извршавању BGTaskScheduler-а на стварном уређају?

За отклањање грешака користите команду e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] у lldb-у. Она присилно покреће задатак, заобилазећи системска ограничења. Такође је доступна заставица Xcode Simulate Background Fetch у менију Debug.

Може ли BGTaskScheduler извршити задатак ако је апликација убијена?

Да, BGTaskScheduler може покренути процес чак и ако је апликација присилно затворена од стране корисника. Међутим, систем може примијенити додатна кашњења и не гарантују сви типови задатака покретање у овом сценарију.

Шта се дешава ако се задатак не уложи у предвиђено вријеме?

Систем ће позвати expirationHandler, пренијевши задатку сигнал о потреби завршетка. Ако апликација игнорише овај сигнал и настави са радом, iOS присилно завршава процес. Након тога, систем може смањити приоритет свих позадинских задатака апликације.

Резиме

  • BGTaskScheduler — је јединствени Apple-ов фрејмворк за управљање свим позадинским задацима у iOS 13+ и macOS Catalina+.
  • Два типа задатака — BGAppRefreshTask до 30 секунди и BGProcessingTask до неколико минута — покривају различите сценарије позадинског рада.
  • Регистрација је обавезна на два мјеста: Info.plist (идентификатори) и код (registerHandler).
  • Планирање преко submitTaskRequest са earliestBeginDate — систем сам бира оптимални тренутак покретања.
  • ExpirationHandler је обавезан за обраду принудног завршетка задатка од стране система.
  • Ограничења укључују недостатак гаранције извршавања, контролу потрошње енергије и зависност од стања уређаја.
  • Користите BGTaskScheduler за ажурирање садржаја, синхронизацију и индексирање, али не за задатке у реалном времену.

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

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

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

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