Arka Plan Görevleri ve Yenileme
BGTaskScheduler ile arka plan işlerini zamanlayın.
Arka Plan Görevleri ve Yenileme, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Arka Plan Görevleri Neden Vardır
iOS, pil tasarrufu yapmak için uygulamaları agresif biçimde askıya alır. Arka plandayken anlamlı işler yapmak — bir akışı yenilemek veya indirmeyi işlemek — için bu işleri BGTaskScheduler üzerinden planlarsınız. Sistem, gereksinimlerinizi güç tüketimi ve kullanım alışkanlıklarıyla dengeleyerek görevin ne zaman çalıştırılacağına karar verir.
import BackgroundTasks
// You request work; the system schedules it later
// at an opportune moment (charging, on Wi-Fi, etc.)İki Görev Türü
İki tür vardır: kısa ve sık güncellemeler (saniyeler) için BGAppRefreshTask ve isteğe bağlı olarak güç ya da ağ gerektiren veritabanı bakımı gibi daha uzun ve ağır işler (dakikalar) için BGProcessingTask.
import BackgroundTasks
// BGAppRefreshTask -> quick content refresh
// BGProcessingTask -> long maintenance, can require
// external power / networkKimlikleri Tanımlama
Her görev, Info.plist içinde BGTaskSchedulerPermittedIdentifiers altında listelediğiniz benzersiz bir kimlik gerektirir. Bu tanım olmadan kayıt başarısız olur. Ters DNS biçimli dizeler kullanın.
// Info.plist:
// BGTaskSchedulerPermittedIdentifiers = [
// "com.example.app.refresh",
// "com.example.app.cleanup"
// ]
let ids = "declare every identifier in Info.plist"
_ = idsİşleyici Kaydetme
Başlatma sırasında her kimlik için BGTaskScheduler.shared.register ile bir işleyici kaydedin. Bu işlem, uygulamanın başlatılması tamamlanmadan önce gerçekleşmelidir. Sistem daha sonra görevi çalıştırmaya karar verdiğinde işleyici çalışır.
import BackgroundTasks
func registerTasks() {
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.example.app.refresh",
using: nil) { task in
handleRefresh(task as! BGAppRefreshTask)
}
}İstek Gönderme
Kayıt yapmak yalnızca işleyiciyi bağlar. Gerçekten çalıştırılmasını istemek için bir BGAppRefreshTaskRequest oluşturun, en erken başlangıç tarihini ayarlayın ve submit edin. Sistem bu tarihi bir ipucu olarak değerlendirir, garanti olarak değil.
import BackgroundTasks
func scheduleRefresh() {
let request = BGAppRefreshTaskRequest(
identifier: "com.example.app.refresh")
request.earliestBeginDate = Date(
timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)
}Her Zaman Yeniden Planlayın
Gönderilen bir istek en fazla bir kez çalışır. Yenilemeyi sürdürmek için işleyicinizin tamamlanmadan önce sonraki isteği göndermesi gerekir. Önce yeniden planlayın, ardından işi yapın; böylece işin ortasında oluşan bir çökme döngüyü durdurmaz.
import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
scheduleRefresh() // queue the next run first
// ... then perform this run's work
}Tamamlandığını Bildirme
İş bittiğinde task.setTaskCompleted(success:) çağrısını yapmalısınız. Bunu unutmak arka plan bütçenizi boşa harcar ve gelecekteki görevlerin önceliğinin düşürülmesine neden olabilir. Sistem planlamayı uyarlayabilsin diye işin başarılı olup olmadığını iletin.
import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
scheduleRefresh()
Task {
let ok = await fetchLatest()
task.setTaskCompleted(success: ok)
}
}
func fetchLatest() async -> Bool { true }Süre Sonlandırma İşleyicisine Uymak
Sistem süreyi erkenden geri alabilir. Çalışan işi iptal etmek ve kesilmeniz durumunda düzgün biçimde çıkmak için task.expirationHandler ayarlayıp gerekli temizliği yapın. Bunu bir son tarih alarmı gibi değerlendirin.
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 }Gereksinimleri Olan İşleme Görevleri
Ağır işler için BGProcessingTaskRequest, requiresNetworkConnectivity ve requiresExternalPower ayarlarını yapmanıza olanak tanır. Sistem bu koşulların sağlanmasını bekler; böylece uzun görevler aygıtın gece boyunca Wi-Fi üzerinden şarj olduğu sırada çalışır.
import BackgroundTasks
func scheduleCleanup() {
let req = BGProcessingTaskRequest(
identifier: "com.example.app.cleanup")
req.requiresExternalPower = true
req.requiresNetworkConnectivity = false
try? BGTaskScheduler.shared.submit(req)
}Hata Ayıklayıcıda Deneme
Sistemin planlaması için saatlerce beklemezsiniz. Hata ayıklayıcıda duraklatıp kayıtlı bir görevi hemen başlatmaya zorlayan bir LLDB komutu çalıştırarak işleyiciyi uçtan uca doğrulayabilirsiniz.
// In LLDB while paused:
// e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
// _simulateLaunchForTaskWithIdentifier:
// @"com.example.app.refresh"]
let test = "force-launch task via LLDB"
_ = testEksiksiz Yenileme Döngüsü
Her şeyi bir araya getirelim: başlatma sırasında kaydolun, arka plana geçişte istek gönderin; işleyicide yeniden planlayın, bir süre sonlandırma işleyicisiyle güvenceye alın, eşzamansız işi yapın ve tamamlandığını bildirin.
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 }Hızlı Kontrol
Yinelenen bir yenileme görevinin yaşam döngüsünü hatırlayın.
Özet
Arka plan planlamasını öğrendiniz:
- Kısa yenilemeler için
BGAppRefreshTask, güç/ağ gereksinimleri olan uzun bakım işleri içinBGProcessingTaskkullanılır. - Kimlikleri Info.plist içinde tanımlayın, başlatma sırasında işleyicileri
registerile kaydedin ve istekleriearliestBeginDateiçeren şekildesubmitedin. - İşleyicinin içinde sonraki çalıştırmayı yeniden planlayın, bir
expirationHandlerayarlayın ve her zamansetTaskCompletedçağrısını yapın. - Denemek için görevleri LLDB üzerinden zorla başlatın.
Sıkça Sorulan Sorular
“Arka Plan Görevleri ve Yenileme” dersi ücretsiz mi?
Evet — “Arka Plan Görevleri ve Yenileme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Arka Plan Görevleri ve Yenileme” dersinde ne öğreneceğim?
BGTaskScheduler ile arka plan işlerini zamanlayın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Arka Plan Görevleri ve Yenileme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Anlık Bildirimlere Kaydolma
- Bildirim Yüklerini İşleme
- Arka Plan Görevleri ve Yenileme
- Bildirim Eylemleri ve Kategorileri