BGTaskScheduler — adalah framework Apple untuk menjadwalkan dan menjalankan tugas latar belakang di aplikasi iOS 13 dan yang lebih baru. Ini menggantikan Background Fetch dan performFetch yang usang, menyediakan API terpadu untuk bekerja dengan operasi latar belakang. Menurut Apple Developer Documentation, 2026, framework ini mencakup dua jenis tugas: BGProcessingTask untuk operasi panjang dan BGAppRefreshTask untuk pembaruan konten singkat.
Poin Penting
BGTaskScheduler — adalah framework sistem Apple, diperkenalkan di iOS 13, yang mengelola eksekusi tugas latar belakang secara terpusat. Sebelum kemunculannya, pengembang menggunakan UIApplication backgroundTasks, performFetch, dan penanganan peristiwa di appDelegate, yang menyebabkan fragmentasi kode dan perilaku yang tidak dapat diprediksi.
Framework ini bekerja berdasarkan prinsip penjadwalan tertunda: aplikasi mendaftarkan tugas dengan pengidentifikasi unik, dan iOS sendiri yang menentukan momen optimal untuk eksekusinya. Sistem mempertimbangkan tingkat baterai, aktivitas pengguna, status jaringan, dan faktor lainnya.
Kemampuan utama mencakup bekerja dengan operasi latar belakang pendek maupun panjang. Tidak seperti AlarmManager di Android, BGTaskScheduler tidak menjamin waktu eksekusi yang tepat — sistem berhak menunda tugas jika kondisinya tidak menguntungkan.
BGTaskScheduler menggunakan arsitektur berbasis handler. Aplikasi mendaftarkan handler untuk setiap jenis tugas, dan sistem memanggilnya ketika saat yang tepat tiba. Framework itu sendiri tidak menjalankan tugas secara langsung — ia hanya memberi tahu aplikasi bahwa sudah waktunya untuk memulainya.
Pendaftaran dimulai dengan mendeklarasikan pengidentifikasi tugas di Info.plist melalui array BGTaskSchedulerPermittedIdentifiers. Kemudian dalam kode aplikasi, metode registerHandler(forTaskWithIdentifier:) dipanggil dengan closure-handler.
import BackgroundTasks
let taskID = "com.example.app.refresh"
BGTaskScheduler.shared.registerHandler(
forTaskWithIdentifier: taskID,
using: DispatchQueue.global()
) { task in
task.expirationHandler = {
// dipanggil saat penghentian paksa
}
processBackgroundTask(task as! BGAppRefreshTask)
}
Setelah pendaftaran, aplikasi harus secara eksplisit meminta eksekusi tugas melalui submitTaskRequest. Permintaan berisi pengidentifikasi tugas dan tanggal mulai paling awal yang memungkinkan. Sistem menyimpan permintaan dan memprosesnya ketika menganggap kondisinya sesuai.
let request = BGAppRefreshTaskRequest(
identifier: taskID
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)
do {
try BGTaskScheduler.shared.submit(request)
} catch {
print("Kesalahan penjadwalan: \(error)")
}
BGTaskScheduler menyediakan dua jenis tugas utama, masing-masing dirancang untuk skenario penggunaannya sendiri. Pemilihan jenis yang tepat secara langsung memengaruhi kemungkinan keberhasilan eksekusi tugas oleh sistem.
BGAppRefreshTask dirancang untuk pembaruan konten latar belakang singkat: memuat data baru, sinkronisasi dengan server, memperbarui widget. Waktu eksekusi dibatasi hingga 30 detik, setelah itu sistem memaksa penghentian tugas. Jenis tugas ini lebih sering dijalankan daripada BGProcessingTask dan memiliki prioritas lebih tinggi.
BGProcessingTask dirancang untuk operasi yang lebih lama: memproses file media, mengindeks data Core Data, membuat cadangan. Tugas dapat berlangsung hingga beberapa menit, tetapi sistem menjalankannya lebih jarang dan hanya dalam kondisi yang menguntungkan — terhubung ke catu daya, Wi-Fi stabil, dan beban perangkat rendah.
| Parameter | BGAppRefreshTask | BGProcessingTask |
|---|---|---|
| Batas waktu | 30 detik | beberapa menit |
| Frekuensi pemulaian | tinggi | rendah |
| Kondisi | semua | daya + Wi-Fi |
| Memerlukan daya | tidak | disarankan |
| Contoh | memperbarui feed | memproses video |
Pendaftaran yang benar — adalah syarat wajib untuk berfungsinya BGTaskScheduler. Jika tugas tidak terdaftar di Info.plist, sistem akan mengabaikan permintaan apa pun untuk menjalankannya.
Ke file Info.plist ditambahkan array BGTaskSchedulerPermittedIdentifiers dengan daftar pengidentifikasi teks. Setiap pengidentifikasi harus unik dalam lingkup aplikasi. Apple merekomendasikan penggunaan notasi domain terbalik.
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
<string>com.example.app.refresh</string>
<string>com.example.app.processing</string>
</array>
Untuk penjadwalan digunakan metode submitTaskRequest. Jika tugas tidak lagi diperlukan, tugas dapat dibatalkan melalui cancelTaskRequest atau cancelAllTaskRequests. Sistem secara otomatis membatalkan tugas saat aplikasi dihapus atau data direset.
BGTaskScheduler menyediakan kemampuan untuk melacak status tugas yang dijadwalkan melalui getPendingTaskRequests. Metode ini mengembalikan daftar semua permintaan aktif dengan informasi tentang jenis, pengidentifikasi, dan earliestBeginDate. Untuk setiap permintaan, dapat diperiksa apakah sudah dijalankan atau dibatalkan, dan keputusan dapat dibuat untuk penjadwalan ulang.
Penting untuk dicatat bahwa sistem tidak menyediakan Callback langsung tentang keberhasilan eksekusi tugas latar belakang — handler sendiri harus melaporkan hasil melalui properti tugas. setTaskCompleted memungkinkan menandai tugas sebagai berhasil diselesaikan, setelah itu sistem dapat menjalankan tugas terjadwal berikutnya dari jenis ini. Jika tugas tidak memanggil setTaskCompleted, sistem menganggapnya selesai setelah batas waktu atau saat penghentian paksa.
Untuk diagnosis masalah, disarankan menggunakan OSLog dalam handler dan melihat log melalui Console.app di Mac. Apple juga menyediakan alat MetricKit untuk analisis kinerja tugas latar belakang — ia mengumpulkan data tentang waktu eksekusi, konsumsi energi, dan frekuensi pemulaian, yang dapat digunakan untuk optimasi.
// Membatalkan tugas tertentu
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)
// Membatalkan semua tugas
BGTaskScheduler.shared.cancelAllTaskRequests()
// Memeriksa tugas yang dijadwalkan
BGTaskScheduler.shared.getPendingTaskRequests { requests in
print("\(requests.count) tugas dijadwalkan")
}
BGTaskScheduler memberlakukan batasan ketat pada pekerjaan latar belakang. Sistem dapat menunda tugas untuk waktu yang tidak ditentukan jika kondisinya tidak menguntungkan. Pengembang harus memahami bahwa framework ini tidak dirancang untuk tugas waktu nyata.
Di antara keterbatasan utama: sistem tidak menjamin eksekusi tugas pada waktu yang ditentukan, jumlah maksimum tugas bersamaan terbatas, dan konsumsi energi dikontrol secara ketat. Menjalankan beberapa tugas secara berurutan dapat menyebabkan penggabungan atau pembatalannya.
Untuk meningkatkan kemungkinan eksekusi, disarankan untuk mengatur earliestBeginDate tidak lebih awal dari 1 jam untuk BGProcessingTask dan 15 menit untuk BGAppRefreshTask. Juga penting untuk menangani expirationHandler — jika tugas tidak memenuhi batas waktu, sistem memanggil handler ini untuk penghentian yang benar. Penjadwalan ulang harus dilakukan di dalam handler itu sendiri untuk mempertahankan siklus kerja latar belakang yang berkelanjutan.
Batasan penting lainnya menyangkut permintaan jaringan. BGTaskScheduler tidak menjamin adanya koneksi jaringan aktif selama eksekusi tugas. Aplikasi harus memeriksa sendiri ketersediaan jaringan melalui NWPathMonitor dan menunda pemrosesan jika koneksi tidak ada. Ini berbeda dengan Android JobScheduler yang dapat mengaktifkan tugas hanya saat terhubung ke jaringan jenis tertentu. Dalam praktiknya, pengembang sering menggabungkan BGTaskScheduler dengan sesi URL latar belakang NSURLSession untuk memuat data yang andal.
Mulai dari macOS Catalina, BGTaskScheduler juga tersedia di Mac. Ini memungkinkan pembuatan tugas latar belakang lintas platform untuk aplikasi UIKit yang berjalan di Apple Silicon. Di watchOS, framework bekerja secara terbatas — hanya tersedia BGAppRefreshTask pendek untuk memperbarui komplikasi dan sinkronisasi data dengan iPhone. Pengembang harus mempertimbangkan perbedaan platform saat merencanakan arsitektur latar belakang.
Untuk debug BGTaskScheduler, Apple menyediakan beberapa alat. Perintah e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] di lldb memaksa menjalankan tugas latar belakang, mengabaikan batasan sistem. Di Xcode tersedia bendera Simulate Background Fetch di menu Debug yang mensimulasikan pembaruan latar belakang singkat. Untuk analisis kinerja digunakan MetricKit — ia mengumpulkan informasi tentang frekuensi pemulaian, durasi eksekusi, dan konsumsi energi setiap tugas. Data ini membantu mengoptimalkan frekuensi penjadwalan dan memilih jenis tugas yang tepat.
Dalam praktiknya, BGTaskScheduler cocok untuk memperbarui data widget, sinkronisasi iCloud, memproses pemberitahuan push dengan konten, dan mengindeks pencarian Spotlight. Tidak cocok untuk mengirim analitik waktu nyata, aplikasi obrolan, atau tugas apa pun yang memerlukan eksekusi segera.
Untuk studi mendalam tentang BGTaskScheduler, Apple merekomendasikan dokumentasi WWDC resmi: sesi “Advances in Background Tasks” (2020) mencakup migrasi dari API lama, dan “Background Tasks in Practice” (2021) berisi studi kasus nyata. Juga berguna bagian Energy Efficiency Guide, yang menjelaskan bagaimana framework ini sesuai dengan strategi penghematan energi Apple secara keseluruhan. Contoh kode tersedia di repositori resmi Apple Developer di GitHub dengan proyek lengkap untuk iOS dan macOS.
Pertanyaan yang Sering Diajukan
Background Fetch terbatas pada satu tugas latar belakang per aplikasi dan tidak memiliki mekanisme prioritas. BGTaskScheduler mendukung banyak tugas dengan jenis berbeda, menyediakan API terpadu dan manajemen energi otomatis.
Apple tidak menetapkan batasan eksplisit pada jumlah pengidentifikasi yang terdaftar, tetapi dalam praktiknya disarankan untuk menggunakan tidak lebih dari 5–10 tugas. Jumlah yang lebih banyak mengurangi kemungkinan pelaksanaan setiap tugas tertentu karena persaingan untuk sumber daya sistem.
Untuk debug, gunakan perintah e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] di lldb. Ini memaksa menjalankan tugas, melewati batasan sistem. Juga tersedia bendera Xcode Simulate Background Fetch di menu Debug.
Ya, BGTaskScheduler dapat memulai proses bahkan jika aplikasi ditutup paksa oleh pengguna. Namun, sistem dapat menerapkan penundaan tambahan dan tidak semua jenis tugas menjamin pemulaian dalam skenario ini.
Sistem akan memanggil expirationHandler, memberikan sinyal kepada tugas untuk berakhir. Jika aplikasi mengabaikan sinyal ini dan terus bekerja, iOS akan memaksa penghentian proses. Setelah itu, sistem dapat menurunkan prioritas semua tugas latar belakang aplikasi.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga