Tugas Latar Belakang dan Penyegaran
Jadwalkan pekerjaan latar belakang dengan BGTaskScheduler.
Tugas Latar Belakang dan Penyegaran adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Alasan Tugas Latar Belakang Dibutuhkan
iOS menangguhkan aplikasi secara agresif untuk menghemat baterai. Untuk melakukan pekerjaan yang berarti saat berada di latar belakang — menyegarkan feed atau memproses unduhan — jadwalkan melalui BGTaskScheduler. Sistem menentukan kapan tugas tersebut dijalankan, dengan menyeimbangkan kebutuhan Anda dan pola penggunaan daya.
import BackgroundTasks
// You request work; the system schedules it later
// at an opportune moment (charging, on Wi-Fi, etc.)Dua Jenis Tugas
Ada dua jenis: BGAppRefreshTask untuk pembaruan singkat dan sering (hitungan detik), serta BGProcessingTask untuk pekerjaan yang lebih lama dan berat (hitungan menit), seperti pemeliharaan basis data, yang secara opsional dapat memerlukan daya atau jaringan.
import BackgroundTasks
// BGAppRefreshTask -> quick content refresh
// BGProcessingTask -> long maintenance, can require
// external power / networkMenetapkan Pengenal
Setiap tugas memerlukan pengenal unik yang Anda cantumkan dalam Info.plist di bawah BGTaskSchedulerPermittedIdentifiers. Tanpa deklarasi ini, pendaftaran akan gagal. Gunakan string bergaya DNS terbalik.
// Info.plist:
// BGTaskSchedulerPermittedIdentifiers = [
// "com.example.app.refresh",
// "com.example.app.cleanup"
// ]
let ids = "declare every identifier in Info.plist"
_ = idsMendaftarkan Penangan
Saat aplikasi diluncurkan, register penangan untuk setiap pengenal dengan BGTaskScheduler.shared.register. Ini harus dilakukan sebelum aplikasi selesai diluncurkan. Penangan akan dijalankan setiap kali sistem nantinya memutuskan untuk mengeksekusi tugas tersebut.
import BackgroundTasks
func registerTasks() {
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.example.app.refresh",
using: nil) { task in
handleRefresh(task as! BGAppRefreshTask)
}
}Mengirimkan Permintaan
Pendaftaran hanya menghubungkan penangan. Untuk benar-benar meminta eksekusi, buat BGAppRefreshTaskRequest, tetapkan tanggal mulai paling awal, lalu lakukan submit. Sistem memperlakukan tanggal tersebut sebagai petunjuk, bukan jaminan.
import BackgroundTasks
func scheduleRefresh() {
let request = BGAppRefreshTaskRequest(
identifier: "com.example.app.refresh")
request.earliestBeginDate = Date(
timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)
}Selalu Menjadwalkan Ulang
Permintaan yang dikirimkan akan berjalan paling banyak satu kali. Agar penyegaran terus berlangsung, penangan Anda harus mengirimkan permintaan berikutnya sebelum selesai. Jadwalkan ulang terlebih dahulu, lalu lakukan pekerjaan, sehingga kerusakan di tengah pekerjaan tidak menghentikan siklus.
import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
scheduleRefresh() // queue the next run first
// ... then perform this run's work
}Menandai Penyelesaian
Anda harus memanggil task.setTaskCompleted(success:) setelah selesai. Melupakannya akan membuang anggaran latar belakang dan dapat membuat tugas berikutnya diprioritaskan lebih rendah. Sampaikan apakah pekerjaan berhasil agar sistem dapat menyesuaikan penjadwalan.
import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
scheduleRefresh()
Task {
let ok = await fetchLatest()
task.setTaskCompleted(success: ok)
}
}
func fetchLatest() async -> Bool { true }Menangani Batas Waktu
Sistem dapat mengambil kembali waktu yang tersedia lebih awal. Tetapkan task.expirationHandler untuk cancel pekerjaan yang sedang berlangsung dan membersihkan sumber daya, sehingga Anda keluar dengan baik jika waktu dipersingkat. Perlakukan ini seperti alarm tenggat waktu.
import BackgroundTasks
func handle(_ task: BGAppRefreshTask) {
let work = Task { await fetchLatest() }
task.expirationHandler = {
work.cancel() // stop before the OS suspends us
}
}
func fetchLatest() async -> Bool { true }Memproses Tugas dengan Persyaratan
Untuk pekerjaan berat, BGProcessingTaskRequest memungkinkan Anda menetapkan requiresNetworkConnectivity dan requiresExternalPower. Sistem menunggu kondisi tersebut terpenuhi, sehingga tugas panjang dapat berjalan saat perangkat diisi daya semalaman melalui Wi-Fi.
import BackgroundTasks
func scheduleCleanup() {
let req = BGProcessingTaskRequest(
identifier: "com.example.app.cleanup")
req.requiresExternalPower = true
req.requiresNetworkConnectivity = false
try? BGTaskScheduler.shared.submit(req)
}Menguji di Alat Debug
Anda tidak perlu menunggu berjam-jam sampai sistem menjadwalkannya. Jeda di alat debug dan jalankan perintah LLDB untuk memaksa tugas yang telah terdaftar agar segera diluncurkan, sehingga Anda dapat memverifikasi penangan secara menyeluruh.
// In LLDB while paused:
// e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
// _simulateLaunchForTaskWithIdentifier:
// @"com.example.app.refresh"]
let test = "force-launch task via LLDB"
_ = testSiklus Penyegaran Lengkap
Menggabungkan semuanya: lakukan pendaftaran saat aplikasi diluncurkan, lakukan submit di latar belakang, lalu di dalam penangan jadwalkan ulang, lindungi dengan penangan kedaluwarsa, lakukan pekerjaan asinkron, dan laporkan penyelesaian.
import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
scheduleRefresh()
let work = Task { await fetchLatest() }
task.expirationHandler = { work.cancel() }
Task {
let ok = await work.value
task.setTaskCompleted(success: ok)
}
}
func fetchLatest() async -> Bool { true }Pemeriksaan Singkat
Ingat kembali siklus hidup tugas penyegaran berulang.
Ringkasan
Anda telah mempelajari penjadwalan di latar belakang:
BGAppRefreshTaskuntuk penyegaran singkat,BGProcessingTaskuntuk pemeliharaan panjang dengan persyaratan daya atau jaringan.- Deklarasikan pengenal dalam Info.plist,
registerpenangan saat aplikasi diluncurkan, dansubmitpermintaan denganearliestBeginDate. - Jadwalkan ulang eksekusi berikutnya di dalam penangan, tetapkan
expirationHandler, dan selalu panggilsetTaskCompleted. - Paksa peluncuran tugas melalui LLDB untuk melakukan pengujian.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Tugas Latar Belakang dan Penyegaran” gratis?
Ya — teks lengkap “Tugas Latar Belakang dan Penyegaran” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Tugas Latar Belakang dan Penyegaran”?
Jadwalkan pekerjaan latar belakang dengan BGTaskScheduler. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Tugas Latar Belakang dan Penyegaran” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mendaftarkan Notifikasi Push
- Menangani Payload Notifikasi
- Tugas Latar Belakang dan Penyegaran
- Tindakan dan Kategori Notifikasi