BGTaskScheduler: bu nədir, iOS-da fon tapşırıqları

Müəllif: IT Sectr Dərc olunub: 2026-03-27 Oxuma vaxtı: 8 dəq

BGTaskScheduler — iOS 13 və daha yeni versiyalarda proqramlarda fon tapşırıqlarını planlaşdırmaq və yerinə yetirmək üçün Apple framework-üdür. O, köhnəlmiş Background Fetch və performFetch-i əvəz edərək fon əməliyyatları ilə işləmək üçün vahid API təmin edir. Apple Developer Documentation, 2026-ya görə, framework iki növ tapşırığı əhatə edir: uzunmüddətli əməliyyatlar üçün BGProcessingTask və qısa məzmun yeniləmələri üçün BGAppRefreshTask.

Əsas Məqamlar

  • BGTaskScheduler — köhnə Background Fetch-i əvəz edən, iOS 13+ üçün fon tapşırıqlarını idarə edən framework.
  • BGAppRefreshTask — məzmun yeniləməsi üçün 30 saniyəyə qədər qısa fon tapşırığı.
  • BGProcessingTask — resurs tutumlu əməliyyatlar üçün bir neçə dəqiqəyə qədər uzun fon tapşırığı.
  • Qeydiyyat Info.plist-də identifikatorlar və kodda handleTasks vasitəsilə aparılır.
  • Sistem istifadəçi davranışına əsasən tapşırıqların işə salınması üçün optimal vaxtı avtomatik müəyyən edir.

BGTaskScheduler nədir?

BGTaskScheduler — iOS 13-də təqdim edilmiş, fon tapşırıqlarının icrasını mərkəzləşdirilmiş şəkildə idarə edən sistem Apple framework-üdür. O ortaya çıxmamışdan əvvəl, proqramçılar UIApplication backgroundTasks, performFetch və appDelegate-də hadisə emalından istifadə edirdilər ki, bu da kod parçalanmasına və gözlənilməz davranışa səbəb olurdu.

Framework təxirə salınmış planlaşdırma prinsipi ilə işləyir: proqram unikal identifikatorlarla tapşırıqları qeydiyyatdan keçirir, iOS isə onların icrası üçün optimal anı özü müəyyən edir. Sistem batareya səviyyəsini, istifadəçi fəaliyyətini, şəbəkə vəziyyətini və digər amilləri nəzərə alır.

Əsas imkanlar həm qısa, həm də uzunmüddətli fon əməliyyatları ilə işləməyi əhatə edir. Android-dəki AlarmManager-dən fərqli olaraq, BGTaskScheduler dəqiq icra vaxtına zəmanət vermir — sistem şərtlər əlverişsiz olduqda tapşırığı təxirə salmaq hüququnu özündə saxlayır.

BGTaskScheduler iOS-da necə işləyir?

BGTaskScheduler handler-lərə əsaslanan arxitekturadan istifadə edir. Proqram hər bir tapşırıq növü üçün handler qeydiyyatdan keçirir və sistem uyğun an gəldikdə onu çağırır. Framework tapşırığı birbaşa yerinə yetirmir — o, yalnız proqrama tapşırığı işə salma vaxtının gəldiyini bildirir.

Tapşırığın qeydiyyat prosesi

Qeydiyyat Info.plist-də BGTaskSchedulerPermittedIdentifiers massivi vasitəsilə tapşırıq identifikatorunun elan edilməsi ilə başlayır. Sonra proqram kodunda registerHandler(forTaskWithIdentifier:) metodu handler-closure ilə çağırılır.

swift
import BackgroundTasks

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

BGTaskScheduler.shared.registerHandler(
    forTaskWithIdentifier: taskID,
    using: DispatchQueue.global()
) { task in
    task.expirationHandler = {
        // məcburi dayandırmada çağırılır
    }
    processBackgroundTask(task as! BGAppRefreshTask)
}

İcranın planlaşdırılması

Qeydiyyatdan sonra proqram submitTaskRequest vasitəsilə tapşırığın icrasını açıq şəkildə tələb etməlidir. Sorğu tapşırıq identifikatorunu və mümkün ən erkən başlama tarixini ehtiva edir. Sistem sorğunu saxlayır və şərtləri uyğun hesab etdikdə emal edir.

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

do {
    try BGTaskScheduler.shared.submit(request)
} catch {
    print("Planlaşdırma xətası: \(error)")
}

BGTaskScheduler fon tapşırıqlarının növləri

BGTaskScheduler hər biri öz istifadə ssenarisi üçün nəzərdə tutulmuş iki əsas tapşırıq növü təqdim edir. Düzgün növün seçilməsi birbaşa tapşırığın sistem tərəfindən uğurla yerinə yetirilmə ehtimalına təsir edir.

BGAppRefreshTask

BGAppRefreshTask qısa fon məzmun yeniləmələri üçün nəzərdə tutulub: yeni məlumatların yüklənməsi, serverlə sinxronizasiya, vidjetlərin yenilənməsi. İcra müddəti 30 saniyə ilə məhdudlaşır, bu müddət bitdikdə sistem tapşırığı məcburi dayandırır. Bu növ tapşırıqlar BGProcessingTask-dan daha tez-tez yerinə yetirilir və daha yüksək prioritetə malikdir.

BGProcessingTask

BGProcessingTask daha uzun əməliyyatlar üçün nəzərdə tutulub: media fayllarının emalı, Core Data məlumatlarının indeksləşdirilməsi, ehtiyat nüsxələrin yaradılması. Tapşırıq bir neçə dəqiqəyə qədər davam edə bilər, lakin sistem onu daha az və yalnız əlverişli şəraitdə — enerji mənbəyinə qoşulduqda, sabit Wi-Fi və cihazın aşağı yükü olduqda işə salır.

ParametrBGAppRefreshTaskBGProcessingTask
Vaxt limiti30 saniyəbir neçə dəqiqə
İşə salınma tezliyiyüksəkaşağı
Şərtləristənilənenerji + Wi-Fi
Enerji tələb ediryoxtövsiyə olunur
Nümunəlentin yenilənməsivideo emalı

Tapşırıqların qeydiyyatı və planlaşdırılması

Düzgün qeydiyyat BGTaskScheduler-ın işləməsi üçün məcburi şərtdir. Tapşırıq Info.plist-də qeydiyyatdan keçməyibsə, sistem onun icrası ilə bağlı istənilən sorğunu görməzlikdən gələcək.

Info.plist-də qeydiyyat

Info.plist faylına mətn identifikatorları siyahısı ilə BGTaskSchedulerPermittedIdentifiers massivi əlavə edilir. Hər bir identifikator proqram çərçivəsində unikal olmalıdır. Apple tərs domen notasiyasından istifadə etməyi tövsiyə edir.

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

Planlaşdırma və ləğv etmə

Planlaşdırma üçün submitTaskRequest metodundan istifadə olunur. Tapşırıq artıq lazım deyilsə, onu cancelTaskRequest və ya cancelAllTaskRequests vasitəsilə ləğv etmək olar. Sistem proqram silindikdə və ya məlumatlar sıfırlandıqda tapşırıqları avtomatik ləğv edir.

Tapşırıqların vəziyyətinin izlənməsi

BGTaskScheduler getPendingTaskRequests vasitəsilə planlaşdırılmış tapşırıqların vəziyyətini izləmək imkanı verir. Bu metod bütün aktiv sorğuların siyahısını onların növü, identifikatoru və earliestBeginDate haqqında məlumatla qaytarır. Hər bir sorğu üçün onun artıq yerinə yetirilib-yetirilmədiyini və ya ləğv edilib-edilmədiyini yoxlamaq və təkrar planlaşdırma haqqında qərar qəbul etmək olar.

Qeyd etmək vacibdir ki, sistem fon tapşırığının uğurla yerinə yetirilməsi haqqında birbaşa Callback təmin etmir — handler özü nəticəni task xüsusiyyətləri vasitəsilə bildirməlidir. setTaskCompleted tapşırığı uğurla başa çatmış kimi qeyd etməyə imkan verir, bundan sonra sistem bu növdən olan növbəti planlaşdırılmış tapşırığı işə sala bilər. Tapşırıq setTaskCompleted-ı çağırmazsa, sistem onu vaxt bitdikdə və ya məcburi dayandırmada başa çatmış hesab edir.

Problemlərin diaqnostikası üçün handlerdə OSLog istifadə etmək və Mac-da Console.app vasitəsilə jurnallara baxmaq tövsiyə olunur. Apple həmçinin fon tapşırıqlarının performans analizi üçün MetricKit alətini təqdim edir — o, optimallaşdırma üçün istifadə edilə bilən icra vaxtı, enerji istehlakı və işə salınma tezliyi haqqında məlumatları toplayır.

swift
// Xüsusi tapşırığın ləğvi
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)

// Bütün tapşırıqların ləğvi
BGTaskScheduler.shared.cancelAllTaskRequests()

// Planlaşdırılmış tapşırıqların yoxlanması
BGTaskScheduler.shared.getPendingTaskRequests { requests in
    print("\(requests.count) tapşırıq planlaşdırıldı")
}

Məhdudiyyətlər və tövsiyələr

BGTaskScheduler fon işinə ciddi məhdudiyyətlər qoyur. Sistem şərtlər əlverişsiz olduqda tapşırığı qeyri-müəyyən müddətə təxirə sala bilər. Proqramçı başa düşməlidir ki, framework real vaxt tapşırıqları üçün nəzərdə tutulmayıb.

Əsas məhdudiyyətlər arasında: sistem tapşırığın göstərilən vaxtda yerinə yetirilməsinə zəmanət vermir, eyni vaxtda olan tapşırıqların maksimum sayı məhduddur və enerji istehlakı ciddi şəkildə idarə olunur. Ardıcıl olaraq bir neçə tapşırığın işə salınması onların birləşməsinə və ya ləğvinə səbəb ola bilər.

İcra ehtimalını artırmaq üçün earliestBeginDate-in BGProcessingTask üçün 1 saatdan, BGAppRefreshTask üçün isə 15 dəqiqədən tez olmayaraq təyin edilməsi tövsiyə olunur. Həmçinin expirationHandler-ı emal etmək vacibdir — tapşırıq limitə sığmazsa, sistem düzgün başa çatdırmaq üçün bu handler-ı çağırır. Təkrar planlaşdırma fasiləsiz fon iş dövrünü saxlamaq üçün handler-ın daxilində aparılmalıdır.

Digər vacib məhdudiyyət şəbəkə sorğularına aiddir. BGTaskScheduler tapşırığın icrası zamanı aktiv şəbəkə bağlantısının mövcudluğuna zəmanət vermir. Proqram NWPathMonitor vasitəsilə şəbəkənin əlçatanlığını özü yoxlamalı və əlaqə olmadıqda emalı təxirə salmalıdır. Bu, müəyyən şəbəkə növünə qoşulduqda tapşırığı aktivləşdirə bilən Android JobScheduler-dən fərqlənir. Praktikada proqramçılar etibarlı məlumat yükləməsi üçün BGTaskScheduler-ı tez-tez NSURLSession fon URL sessiyaları ilə birləşdirirlər.

macOS və watchOS ilə uyğunluq

macOS Catalina-dan başlayaraq BGTaskScheduler Mac-da da mövcuddur. Bu, Apple Silicon-da işləyən UIKit proqramları üçün platformalararası fon tapşırıqları yaratmağa imkan verir. watchOS-da framework məhdud şəkildə işləyir — yalnız komplikasiyaların yenilənməsi və iPhone ilə məlumat sinxronizasiyası üçün qısa BGAppRefreshTask mövcuddur. Proqramçılar fon arxitekturasını planlaşdırarkən platforma fərqlərini nəzərə almalıdırlar.

Debug və diaqnostika alətləri

BGTaskScheduler-ın debug edilməsi üçün Apple bir neçə alət təqdim edir. e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] əmri lldb-də sistem məhdudiyyətlərini nəzərə almadan fon tapşırığını məcburi işə salır. Xcode-da Debug menyusunda Simulate Background Fetch bayrağı mövcuddur ki, bu da qısa fon yeniləməsini emulyasiya edir. Performans analizi üçün MetricKit istifadə olunur — o, hər bir tapşırığın işə salınma tezliyi, icra müddəti və enerji istehlakı haqqında məlumat toplayır. Bu məlumatlar planlaşdırma tezliyini optimallaşdırmağa və düzgün tapşırıq növünü seçməyə kömək edir.

Praktikada BGTaskScheduler vidjet məlumatlarının yenilənməsi, iCloud sinxronizasiyası, məzmunlu push bildirişlərinin emalı və Spotlight axtarış indeksləşdirilməsi üçün yaxşı uyğundur. Real vaxt analitikası göndərmək, chat proqramları və ya dərhal icra tələb edən hər hansı tapşırıqlar üçün uyğun deyil.

Apple resursları və sənədləri

BGTaskScheduler-ı dərindən öyrənmək üçün Apple rəsmi WWDC sənədlərini tövsiyə edir: “Advances in Background Tasks” (2020) sessiyası köhnəlmiş API-lərdən miqrasiyanı, “Background Tasks in Practice” (2021) isə real istifadə hallarını əhatə edir. Həmçinin framework-ün Apple-ın ümumi enerji qənaət strategiyasına necə uyğunlaşdığını təsvir edən Energy Efficiency Guide bölməsi faydalıdır. Kod nümunələri GitHub-da Apple Developer rəsmi reposunda iOS və macOS üçün tam layihələrlə mövcuddur.

Tez-tez verilən suallar

BGTaskScheduler iOS 12-də Background Fetch-dən nə ilə fərqlənir?

Background Fetch proqram başına bir fon tapşırığı ilə məhdud idi və prioritet mexanizminə malik deyildi. BGTaskScheduler müxtəlif növ tapşırıqları dəstəkləyir, vahid API və avtomatik enerji idarəetməsi təmin edir.

BGTaskScheduler-da neçə fon tapşırığı qeydiyyatdan keçirilə bilər?

Apple qeydiyyatdan keçirilmiş identifikatorların sayına açıq məhdudiyyət qoymur, lakin praktikada 5–10-dan çox olmayan tapşırıqdan istifadə etmək tövsiyə olunur. Daha çox say sistem resursları üçün rəqabət səbəbindən hər bir konkret tapşırığın yerinə yetirilmə ehtimalını azaldır.

BGTaskScheduler-ın icrasını real cihazda necə debug etmək olar?

Debug üçün lldb-də e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] əmrindən istifadə edin. O, sistem məhdudiyyətlərini keçərək tapşırığı məcburi işə salır. Həmçinin Xcode Debug menyusunda Simulate Background Fetch bayrağı mövcuddur.

BGTaskScheduler proqram bağlandıqda tapşırığı yerinə yetirə bilərmi?

Bəli, BGTaskScheduler proqram istifadəçi tərəfindən məcburi bağlansa belə prosesi işə sala bilər. Lakin sistem əlavə gecikmələr tətbiq edə bilər və bütün tapşırıq növləri bu ssenaridə işə salınmağa zəmanət vermir.

Tapşırıq ayrılmış vaxta sığmazsa nə baş verir?

Sistem tapşırığa başa çatma zərurəti haqqında siqnal göndərərək expirationHandler-ı çağırır. Proqram bu siqnalı nəzərə almayıb işə davam edərsə, iOS prosesi məcburi dayandırır. Bundan sonra sistem proqramın bütün fon tapşırıqlarının prioritetini aşağı sala bilər.

Nəticə

  • BGTaskScheduler — iOS 13+ və macOS Catalina+-da bütün fon tapşırıqlarını idarə etmək üçün Apple-ın vahid framework-üdür.
  • İki növ tapşırıq — 30 saniyəyə qədər BGAppRefreshTask və bir neçə dəqiqəyə qədər BGProcessingTask — müxtəlif fon iş ssenarilərini əhatə edir.
  • Qeydiyyat iki yerdə məcburidir: Info.plist (identifikatorlar) və kod (registerHandler).
  • Planlaşdırma earliestBeginDate ilə submitTaskRequest vasitəsilə — sistem özü optimal başlama anını seçir.
  • ExpirationHandler sistem tərəfindən məcburi dayandırmanı emal etmək üçün məcburidir.
  • Məhdudiyyətlər icra zəmanətinin olmaması, enerji istehlakına nəzarət və cihaz vəziyyətindən asılılığı əhatə edir.
  • İstifadə edin BGTaskScheduler-ı məzmun yeniləməsi, sinxronizasiya və indeksləşdirmə üçün, lakin real vaxt tapşırıqları üçün yox.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun