BGTaskScheduler — ay isang framework ng Apple para sa pag-iskedyul at pagsasagawa ng mga background na gawain sa mga aplikasyon ng iOS 13 at mas bago. Pinalitan nito ang lumang Background Fetch at performFetch, na nagbibigay ng nag-iisang API para sa pagtatrabaho sa mga background na operasyon. Ayon sa Apple Developer Documentation, 2026, ang framework ay may kasamang dalawang uri ng mga gawain: BGProcessingTask para sa mahahabang operasyon at BGAppRefreshTask para sa maiikling pag-update ng nilalaman.
Mga Pangunahing Punto
BGTaskScheduler — ay isang system framework ng Apple, na ipinakilala sa iOS 13, na sentralisadong namamahala sa pagsasagawa ng mga background na gawain. Bago ito lumitaw, ang mga developer ay gumamit ng UIApplication backgroundTasks, performFetch, at paghawak ng kaganapan sa appDelegate, na humantong sa pagkakapira-piraso ng code at hindi inaasahang pag-uugali.
Ang framework ay gumagana sa prinsipyo ng naantalang pag-iskedyul: ang aplikasyon ay nagrerehistro ng mga gawain na may natatanging mga identifier, at ang iOS mismo ang tumutukoy sa pinakamainam na sandali para sa kanilang pagsasagawa. Isinasaalang-alang ng sistema ang antas ng baterya, aktibidad ng gumagamit, kalagayan ng network, at iba pang mga salik.
Mga pangunahing kakayahan ay may kasamang pagtatrabaho sa parehong maikli at mahabang background na operasyon. Hindi tulad ng AlarmManager sa Android, ang BGTaskScheduler ay hindi ginagarantiyahan ang eksaktong oras ng pagsasagawa — ang sistema ay nagpapanatili ng karapatang ipagpaliban ang gawain kung ang mga kondisyon ay hindi paborable.
BGTaskScheduler ay gumagamit ng arkitekturang batay sa mga handler. Ang aplikasyon ay nagrerehistro ng handler para sa bawat uri ng gawain, at tinatawag ito ng sistema kapag dumating ang angkop na sandali. Ang framework mismo ay hindi direktang nagsasagawa ng gawain — ito ay nagpapaalam lamang sa aplikasyon na oras na upang simulan ito.
Ang pagpaparehistro ay nagsisimula sa pagdedeklara ng identifier ng gawain sa Info.plist sa pamamagitan ng array na BGTaskSchedulerPermittedIdentifiers. Pagkatapos, sa code ng aplikasyon, ang pamamaraang registerHandler(forTaskWithIdentifier:) ay tinatawag na may handler-closure.
import BackgroundTasks
let taskID = "com.example.app.refresh"
BGTaskScheduler.shared.registerHandler(
forTaskWithIdentifier: taskID,
using: DispatchQueue.global()
) { task in
task.expirationHandler = {
// tinatawag kapag sapilitang tinatapos
}
processBackgroundTask(task as! BGAppRefreshTask)
}
Pagkatapos ng pagpaparehistro, ang aplikasyon ay dapat tahasang humiling ng pagsasagawa ng gawain sa pamamagitan ng submitTaskRequest. Ang kahilingan ay naglalaman ng identifier ng gawain at ang petsa ng pinakamaagang posibleng pagsisimula. Iniimbak ng sistema ang kahilingan at pinoproseso ito kapag itinuturing nitong angkop ang mga kondisyon.
let request = BGAppRefreshTaskRequest(
identifier: taskID
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)
do {
try BGTaskScheduler.shared.submit(request)
} catch {
print("Error sa pag-iskedyul: \(error)")
}
BGTaskScheduler ay nagbibigay ng dalawang pangunahing uri ng mga gawain, bawat isa ay dinisenyo para sa sarili nitong senaryo ng paggamit. Ang pagpili ng tamang uri ay direktang nakakaapekto sa posibilidad ng matagumpay na pagsasagawa ng gawain ng sistema.
BGAppRefreshTask ay dinisenyo para sa maiikling background na pag-update ng nilalaman: pag-load ng bagong data, pag-sync sa server, pag-update ng mga widget. Ang oras ng pagsasagawa ay limitado sa 30 segundo, pagkatapos nito ay sapilitang tinatapos ng sistema ang gawain. Ang uri na ito ng mga gawain ay mas madalas na isinasagawa kaysa sa BGProcessingTask at may mas mataas na priyoridad.
BGProcessingTask ay dinisenyo para sa mas mahabang operasyon: pagproseso ng mga media file, pag-index ng data ng Core Data, paggawa ng mga backup. Ang gawain ay maaaring tumagal ng hanggang ilang minuto, ngunit ang sistema ay mas madalas itong simulan at lamang sa paborableng mga kondisyon — nakakonekta sa kuryente, matatag na Wi-Fi at mababang karga ng aparato.
| Parameter | BGAppRefreshTask | BGProcessingTask |
|---|---|---|
| Limitasyon sa oras | 30 segundo | ilang minuto |
| Dalas ng pagsisimula | mataas | mababa |
| Mga kondisyon | anumang | kuryente + Wi-Fi |
| Nangangailangan ng kuryente | hindi | inirerekomenda |
| Halimbawa | pag-update ng feed | pagproseso ng video |
Tamang pagpaparehistro — ay isang kinakailangang kondisyon para sa paggana ng BGTaskScheduler. Kung ang gawain ay hindi nakarehistro sa Info.plist, babalewalain ng sistema ang anumang kahilingan para sa pagsasagawa nito.
Sa file na Info.plist ay idinaragdag ang isang array na BGTaskSchedulerPermittedIdentifiers na may listahan ng mga text identifier. Ang bawat identifier ay dapat na natatangi sa loob ng aplikasyon. Inirerekomenda ng Apple ang paggamit ng reverse domain notation.
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>com.example.app.refresh</string>
<string>com.example.app.processing</string>
</array>
Para sa pag-iskedyul ay ginagamit ang pamamaraang submitTaskRequest. Kung ang gawain ay hindi na kailangan, maaari itong kanselahin sa pamamagitan ng cancelTaskRequest o cancelAllTaskRequests. Awtomatikong kinakansela ng sistema ang mga gawain kapag tinanggal ang aplikasyon o ni-reset ang data.
Ang BGTaskScheduler ay nagbibigay ng kakayahang subaybayan ang kalagayan ng mga naka-iskedyul na gawain sa pamamagitan ng getPendingTaskRequests. Ang pamamaraang ito ay nagbabalik ng listahan ng lahat ng aktibong kahilingan na may impormasyon tungkol sa kanilang uri, identifier, at earliestBeginDate. Para sa bawat kahilingan, maaaring suriin kung ito ay naisagawa na o nakansela, at gumawa ng desisyon tungkol sa muling pag-iskedyul.
Mahalagang tandaan na ang sistema ay hindi nagbibigay ng direktang Callback tungkol sa tagumpay ng pagsasagawa ng background na gawain — ang handler mismo ang dapat mag-ulat ng resulta sa pamamagitan ng mga katangian ng gawain. Ang setTaskCompleted ay nagpapahintulot na markahan ang gawain bilang matagumpay na natapos, pagkatapos nito ay maaaring simulan ng sistema ang susunod na naka-iskedyul na gawain ng uri na ito. Kung ang gawain ay hindi tumawag ng setTaskCompleted, itinuturing ito ng sistema na natapos pagkatapos ng oras o sa sapilitang pagtatapos.
Para sa diagnosis ng mga problema, inirerekomenda ang paggamit ng OSLog sa handler at pagtingin ng mga log sa pamamagitan ng Console.app sa Mac. Ang Apple ay nagbibigay din ng tool na MetricKit para sa pagsusuri ng pagganap ng mga background na gawain — ito ay nangongolekta ng data tungkol sa oras ng pagsasagawa, konsumo ng enerhiya, at dalas ng pagsisimula, na maaaring magamit para sa pag-optimize.
// Kanselahin ang partikular na gawain
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)
// Kanselahin ang lahat ng gawain
BGTaskScheduler.shared.cancelAllTaskRequests()
// Suriin ang mga naka-iskedyul na gawain
BGTaskScheduler.shared.getPendingTaskRequests { requests in
print("\(requests.count) gawain ang naka-iskedyul")
}
BGTaskScheduler ay nagpapataw ng mahigpit na mga limitasyon sa background na trabaho. Maaaring ipagpaliban ng sistema ang gawain para sa hindi tiyak na panahon kung ang mga kondisyon ay hindi paborable. Dapat maunawaan ng developer na ang framework ay hindi dinisenyo para sa real-time na mga gawain.
Kabilang sa mga pangunahing limitasyon: ang sistema ay hindi ginagarantiyahan ang pagsasagawa ng gawain sa tinukoy na oras, ang maximum na bilang ng sabay-sabay na mga gawain ay limitado, at ang konsumo ng enerhiya ay mahigpit na kinokontrol. Ang pagsisimula ng maraming gawain nang sunud-sunod ay maaaring humantong sa kanilang pagsasama o pagkansela.
Upang mapataas ang posibilidad ng pagsasagawa, inirerekomenda na itakda ang earliestBeginDate hindi mas maaga kaysa sa 1 oras para sa BGProcessingTask at 15 minuto para sa BGAppRefreshTask. Mahalaga rin na hawakan ang expirationHandler — kung ang gawain ay hindi umaangkop sa limitasyon, tinatawag ng sistema ang handler na ito para sa tamang pagtatapos. Ang muling pag-iskedyul ay dapat gawin sa loob ng handler mismo upang mapanatili ang tuloy-tuloy na siklo ng background na trabaho.
Ang isa pang mahalagang limitasyon ay may kinalaman sa mga kahilingan sa network. Ang BGTaskScheduler ay hindi ginagarantiyahan ang aktibong koneksyon sa network habang isinasagawa ang gawain. Ang aplikasyon ay dapat mismo suriin ang pagkakaroon ng network sa pamamagitan ng NWPathMonitor at ipagpaliban ang pagproseso kung walang koneksyon. Ito ay naiiba sa Android JobScheduler na maaaring i-activate ang gawain lamang kapag konektado sa isang partikular na uri ng network. Sa praktika, madalas pinagsasama ng mga developer ang BGTaskScheduler sa mga background na URL session ng NSURLSession para sa maaasahang pag-load ng data.
Simula sa macOS Catalina, ang BGTaskScheduler ay magagamit din sa Mac. Ito ay nagpapahintulot sa paglikha ng cross-platform na mga background na gawain para sa mga aplikasyon ng UIKit na tumatakbo sa Apple Silicon. Sa watchOS, ang framework ay gumagana nang limitado — tanging maiikling BGAppRefreshTask ang magagamit para sa pag-update ng mga komplikasyon at pag-sync ng data sa iPhone. Dapat isaalang-alang ng mga developer ang mga pagkakaiba sa platform kapag nagpaplano ng background na arkitektura.
Para sa debug ng BGTaskScheduler, ang Apple ay nagbibigay ng ilang mga tool. Ang utos na e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] sa lldb ay sapilitang nagpapatakbo ng background na gawain, hindi pinapansin ang mga limitasyon ng sistema. Sa Xcode ay magagamit ang flag na Simulate Background Fetch sa menu ng Debug na ginagaya ang maikling background na pag-update. Para sa pagsusuri ng pagganap ay ginagamit ang MetricKit — ito ay nangongolekta ng impormasyon tungkol sa dalas ng pagsisimula, tagal ng pagsasagawa, at konsumo ng enerhiya ng bawat gawain. Ang data na ito ay tumutulong sa pag-optimize ng dalas ng pag-iskedyul at pagpili ng tamang uri ng gawain.
Sa praktika, ang BGTaskScheduler ay angkop para sa pag-update ng data ng widget, pag-sync ng iCloud, pagproseso ng mga push notification na may nilalaman, at pag-index ng paghahanap sa Spotlight. Hindi angkop para sa pagpapadala ng real-time na analytics, mga chat application, o anumang mga gawain na nangangailangan ng agarang pagsasagawa.
Para sa malalim na pag-aaral ng BGTaskScheduler, inirerekomenda ng Apple ang opisyal na dokumentasyon ng WWDC: ang sesyon na “Advances in Background Tasks” (2020) ay sumasaklaw sa paglipat mula sa lumang API, at ang “Background Tasks in Practice” (2021) ay naglalaman ng mga tunay na kaso ng paggamit. Kapaki-pakinabang din ang seksyong Energy Efficiency Guide, kung saan inilalarawan kung paano umaangkop ang framework sa pangkalahatang estratehiya ng pagtitipid ng enerhiya ng Apple. Ang mga halimbawa ng code ay magagamit sa opisyal na repositoryo ng Apple Developer sa GitHub na may kumpletong mga proyekto para sa iOS at macOS.
Mga Madalas Itanong
Background Fetch ay limitado sa isang background na gawain bawat aplikasyon at walang mekanismo ng priyoridad. Ang BGTaskScheduler ay sumusuporta sa maraming gawain ng iba't ibang uri, nagbibigay ng nag-iisang API at awtomatikong pamamahala ng enerhiya.
Ang Apple ay hindi nagtatakda ng tahasang limitasyon sa bilang ng mga rehistradong identifier, ngunit sa praktika ay inirerekomenda na gumamit ng hindi hihigit sa 5–10 gawain. Ang mas maraming bilang ay nagbabawas ng posibilidad ng pagsasagawa ng bawat partikular na gawain dahil sa kompetisyon para sa mga mapagkukunan ng sistema.
Para sa debug, gamitin ang utos na e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] sa lldb. Sapilitan nitong pinapatakbo ang gawain, lalampas sa mga limitasyon ng sistema. Gayundin, ang flag na Xcode Simulate Background Fetch ay magagamit sa menu ng Debug.
Oo, ang BGTaskScheduler ay maaaring magsimula ng proseso kahit na ang aplikasyon ay sapilitang isinara ng gumagamit. Gayunpaman, ang sistema ay maaaring maglapat ng karagdagang mga pagkaantala at hindi lahat ng uri ng gawain ay ginagarantiyahan ang pagsisimula sa senaryong ito.
Tatawagin ng sistema ang expirationHandler, na magbibigay ng senyales sa gawain na kailangan itong tapusin. Kung babalewalain ng aplikasyon ang senyales na ito at magpatuloy sa pagtatrabaho, sapilitang tatapusin ng iOS ang proseso. Pagkatapos nito, maaaring babaan ng sistema ang priyoridad ng lahat ng background na gawain ng aplikasyon.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din