BGTaskScheduler: apa itu, tugas latar belakang iOS

Penulis: IT Sectr Diterbitkan: 2026-03-27 Waktu membaca: 8 mnt

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 iOS 13+ untuk mengelola tugas latar belakang yang menggantikan Background Fetch lama.
  • BGAppRefreshTask — tugas latar belakang singkat hingga 30 detik untuk memperbarui konten.
  • BGProcessingTask — tugas latar belakang panjang hingga beberapa menit untuk operasi yang membutuhkan sumber daya.
  • Pendaftaran tugas dilakukan di Info.plist melalui pengidentifikasi dan dalam kode melalui handleTasks.
  • Sistem secara otomatis menentukan waktu optimal untuk menjalankan tugas berdasarkan perilaku pengguna.

Apa itu BGTaskScheduler?

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.

Bagaimana BGTaskScheduler bekerja di iOS?

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.

Proses pendaftaran tugas

Pendaftaran dimulai dengan mendeklarasikan pengidentifikasi tugas di Info.plist melalui array BGTaskSchedulerPermittedIdentifiers. Kemudian dalam kode aplikasi, metode registerHandler(forTaskWithIdentifier:) dipanggil dengan closure-handler.

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

Penjadwalan eksekusi

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.

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

do {
    try BGTaskScheduler.shared.submit(request)
} catch {
    print("Kesalahan penjadwalan: \(error)")
}

Jenis tugas latar belakang BGTaskScheduler

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

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

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.

ParameterBGAppRefreshTaskBGProcessingTask
Batas waktu30 detikbeberapa menit
Frekuensi pemulaiantinggirendah
Kondisisemuadaya + Wi-Fi
Memerlukan dayatidakdisarankan
Contohmemperbarui feedmemproses video

Pendaftaran dan penjadwalan tugas

Pendaftaran yang benar — adalah syarat wajib untuk berfungsinya BGTaskScheduler. Jika tugas tidak terdaftar di Info.plist, sistem akan mengabaikan permintaan apa pun untuk menjalankannya.

Pendaftaran di Info.plist

Ke file Info.plist ditambahkan array BGTaskSchedulerPermittedIdentifiers dengan daftar pengidentifikasi teks. Setiap pengidentifikasi harus unik dalam lingkup aplikasi. Apple merekomendasikan penggunaan notasi domain terbalik.

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

Penjadwalan dan pembatalan

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.

Memantau status tugas

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.

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

Keterbatasan dan rekomendasi

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.

Kompatibilitas dengan macOS dan watchOS

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.

Alat debug dan diagnosis

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.

Sumber daya dan dokumentasi Apple

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

Apa perbedaan BGTaskScheduler dengan Background Fetch di iOS 12?

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.

Berapa banyak tugas latar belakang yang dapat didaftarkan di BGTaskScheduler?

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.

Bagaimana cara men-debug eksekusi BGTaskScheduler pada perangkat nyata?

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.

Dapatkah BGTaskScheduler menjalankan tugas jika aplikasi ditutup?

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.

Apa yang terjadi jika tugas tidak selesai dalam waktu yang ditentukan?

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

  • BGTaskScheduler — adalah framework terpadu Apple untuk mengelola semua tugas latar belakang di iOS 13+ dan macOS Catalina+.
  • Dua jenis tugas — BGAppRefreshTask hingga 30 detik dan BGProcessingTask hingga beberapa menit — mencakup berbagai skenario kerja latar belakang.
  • Pendaftaran wajib di dua tempat: Info.plist (pengidentifikasi) dan kode (registerHandler).
  • Penjadwalan melalui submitTaskRequest dengan earliestBeginDate — sistem sendiri yang memilih momen mulai yang optimal.
  • ExpirationHandler wajib untuk menangani penghentian paksa tugas oleh sistem.
  • Keterbatasan mencakup tidak adanya jaminan eksekusi, kontrol konsumsi energi, dan ketergantungan pada status perangkat.
  • Gunakan BGTaskScheduler untuk pembaruan konten, sinkronisasi, dan pengindeksan, tetapi tidak untuk tugas waktu nyata.

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.

Diskusikan proyek

Baca juga