Tugas Latar Belakang dan Penyegaran
Jadualkan kerja latar belakang dengan BGTaskScheduler.
Tugas Latar Belakang dan Penyegaran ialah pelajaran Swift Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Swift Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Mengapa Tugas Latar Belakang Wujud
iOS menggantung aplikasi secara agresif untuk menjimatkan bateri. Untuk melakukan kerja yang bermakna ketika berada di latar belakang — menyegarkan suapan, memproses muat turun — anda menjadualkannya melalui BGTaskScheduler. Sistem menentukan bila tugas itu dijalankan dengan mengimbangi keperluan anda terhadap corak kuasa dan penggunaan.
import BackgroundTasks
// You request work; the system schedules it later
// at an opportune moment (charging, on Wi-Fi, etc.)Dua Jenis Tugas
Terdapat dua jenis: BGAppRefreshTask untuk kemas kini yang singkat dan kerap (saat), serta BGProcessingTask untuk kerja yang lebih lama dan berat (minit), seperti penyelenggaraan pangkalan data, yang secara pilihan memerlukan kuasa atau rangkaian.
import BackgroundTasks
// BGAppRefreshTask -> quick content refresh
// BGProcessingTask -> long maintenance, can require
// external power / networkMengisytiharkan Pengecam
Setiap tugas memerlukan pengecam unik yang disenaraikan dalam Info.plist di bawah BGTaskSchedulerPermittedIdentifiers. Tanpa pengisytiharan ini, pendaftaran akan gagal. Gunakan rentetan gaya DNS terbalik.
// Info.plist:
// BGTaskSchedulerPermittedIdentifiers = [
// "com.example.app.refresh",
// "com.example.app.cleanup"
// ]
let ids = "declare every identifier in Info.plist"
_ = idsMendaftarkan Pengendali
Semasa pelancaran, daftarkan pengendali untuk setiap pengecam dengan BGTaskScheduler.shared.register. Perkara ini mesti berlaku sebelum aplikasi selesai dilancarkan. Pengendali akan dijalankan apabila sistem kemudiannya memutuskan untuk melaksanakan tugas itu.
import BackgroundTasks
func registerTasks() {
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.example.app.refresh",
using: nil) { task in
handleRefresh(task as! BGAppRefreshTask)
}
}Menghantar Permintaan
Pendaftaran hanya menyambungkan pengendali. Untuk benar-benar meminta pelaksanaan, bina BGAppRefreshTaskRequest, tetapkan tarikh mula terawal dan submit permintaan itu. Sistem menganggap tarikh 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)
}Sentiasa Menjadualkan Semula
Permintaan yang dihantar berjalan paling banyak sekali. Untuk terus menyegarkan data, pengendali anda mesti menghantar permintaan seterusnya sebelum selesai. Jadualkan semula dahulu, kemudian lakukan kerja supaya ranap semasa kerja tidak menghentikan kitaran.
import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
scheduleRefresh() // queue the next run first
// ... then perform this run's work
}Menandakan Penyelesaian
Anda mesti memanggil task.setTaskCompleted(success:) apabila selesai. Jika terlupa memanggilnya, belanjawan latar belakang anda akan terbazir dan tugas akan datang mungkin diberikan keutamaan lebih rendah. Nyatakan sama ada kerja itu berjaya supaya sistem boleh menyesuaikan penjadualan.
import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
scheduleRefresh()
Task {
let ok = await fetchLatest()
task.setTaskCompleted(success: ok)
}
}
func fetchLatest() async -> Bool { true }Mematuhi Pengendali Tamat Tempoh
Sistem boleh mengambil semula masa lebih awal. Tetapkan task.expirationHandler untuk membatalkan kerja yang sedang berjalan dan melakukan pembersihan supaya anda keluar dengan baik jika kerja dipendekkan. Anggapnya sebagai penggera tarikh akhir.
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 Keperluan
Untuk kerja berat, BGProcessingTaskRequest membolehkan anda menetapkan requiresNetworkConnectivity dan requiresExternalPower. Sistem menunggu syarat tersebut dipenuhi, jadi tugas yang panjang boleh berjalan ketika peranti dicas 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 dalam Penyahpepijat
Anda tidak perlu menunggu berjam-jam untuk sistem menjadualkannya. Jeda dalam penyahpepijat dan jalankan perintah LLDB untuk memaksa tugas yang didaftarkan dilancarkan serta-merta, supaya anda boleh mengesahkan pengendali dari hujung ke hujung.
// In LLDB while paused:
// e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
// _simulateLaunchForTaskWithIdentifier:
// @"com.example.app.refresh"]
let test = "force-launch task via LLDB"
_ = testKitaran Penyegaran Lengkap
Secara keseluruhan: daftar semasa pelancaran, hantar apabila berada di latar belakang, dan dalam pengendali, jadualkan semula, lindungi dengan pengendali tamat tempoh, lakukan kerja tak segerak 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 }Semakan Pantas
Ingat kembali kitar hayat tugas penyegaran berulang.
Imbas Kembali
Anda telah mempelajari penjadualan latar belakang:
BGAppRefreshTaskuntuk penyegaran singkat, danBGProcessingTaskuntuk penyelenggaraan panjang dengan keperluan kuasa/rangkaian.- Isytiharkan pengecam dalam Info.plist, daftarkan pengendali melalui
registersemasa pelancaran dan hantar permintaan melaluisubmitdenganearliestBeginDate. - Jadualkan semula pelaksanaan seterusnya dalam pengendali, tetapkan
expirationHandlerdan sentiasa panggilsetTaskCompleted. - Paksa tugas dilancarkan melalui LLDB untuk mengujinya.
Pelajari Swift dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 122
- Pelajaran
- 409
Soalan Lazim
Adakah pelajaran “Tugas Latar Belakang dan Penyegaran” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Swift Academy, termasuk “Tugas Latar Belakang dan Penyegaran”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Swift Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Tugas Latar Belakang dan Penyegaran”?
Jadualkan kerja latar belakang dengan BGTaskScheduler. Anda berlatih Swift Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Swift Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Swift Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Tugas Latar Belakang dan Penyegaran” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mendaftar untuk Pemberitahuan Tolak
- Mengendalikan Muatan Pemberitahuan
- Tugas Latar Belakang dan Penyegaran
- Tindakan dan Kategori Pemberitahuan