Ios App Sorumluluklarını Korumak için Arka Görevleri Uygulamayı Uygulamayı Uygulamayı Uygulamayı Uygulamayı Uygulamayı Uygulamayı Uygulamayı Uygulamayı Etkiliyor
Table of Contents
Neden iOS App Sorumlulukları için Arka Plan Görevleri
Kullanıcılar, iOS uygulamalarının anında hissetmelerini beklerler, veri senkronizasyonu gibi işlemleri gerçekleştirmek için uygulamanızın hemen yapılması ve kullanıcı arayüzünü engellemeden önce temiz olması gerekir.Bu, yükleme çalışması için gerekli olan yükün tutulması gerekir ve sistem kaynaklarınız verimli bir şekilde kullanılır.
Anahtar, her işlem için doğru arka plan yürütme modu kullanmak ve iOS'un arka plan yürütmesi hakkında katı kurallara uymak için tasarlanmıştır. iOS, kullanıcının mevcut uygulamasına öncelik vermek ve hafıza veya güç kısıtlamaları gerektiğinde arka plan süreçleri öldürmek için tasarlanmıştır. Bu nedenle, iOS 13'te getirilen arka plan görevleri anlamak modern, iyi niyetli bir uygulama oluşturmak için önemlidir.
iOS'ta Arka Plan Yürütmeyi Anlamak
iOS, arka plan çalışması için birkaç mekanizma sağlar, her biri farklı kullanım vakalarına uygundur.TheİLFLT:0)BackgroundTasks[Dön 1: 1) çerçevesi, ağ bağlantı, batarya seviyesi ve kullanıcı etkileşimi gibi faktörler göz önünde bulundurmak için önerilen bir yaklaşımdır.
Diğer arka plan yürütme modları belirli senaryolar için mevcuttur:
- [FONT:0)Background ([Dönetici: 1 ) - kısa bir fırsat (yaklaşık 30 saniye) küçük miktarlarda içeriği düzenli olarak indirmek için.
- [FONT:0)Background processing[[[Dön işleme][Dönetici:0)) - veritabanı bakımı veya varlık pruning gibi daha ağır görevler için daha uzun bir pencere ( dakikalar).
- [FONT:0)Remote bildirimleri[[Dönetici:0)[değiştir | kaynağı değiştir] - uygulamayı [[0) ile işlem için uyandırmak için uyandırmak için.
- [[Düzzamanın arka plan transferleri[[[Dönem:0)[Dönetici:0)URLSession arka plan transferleri[[Dönetici:0)[Dönlendirme veya indirme işlemi askıya alınsa veya indirme)
- [[0)VoIP / ses / yer) - Uygulamayı daha uzun süre süren özel modlar.
Genel amaçlı arka plan çalışması için kullanıcı tarafından yönlendirilme olmadan planlanabilir ve pil hayatı, 444FLT:0)BGTaskScheduler) API en iyi seçimdir.Sistem tarafından öldürülme riskini azaltır ve pil hayatını azaltır.
Arka plandaki temel bileşenleri
- [FONT:0)BGProcessingTask[[DÜT:1) - tam bir senkronize dosyaları gerçekleştirmek veya yerel bir veritabanı güncelleştirmek gibi, dikkat çekici miktarda zaman almak için tasarlanmıştır. Sistem, daha büyük bir zaman bütçesi ( dakikalar) verir ve koşulları uygun olduğunda planlar yapar (örneğin, Wi-Fi ve şarj).
- [[DÜDÜ:0)BGAppRefreshTask[DÜT:1) - kısa yenilemeler için tasarlanmıştır, genellikle birkaç saniye boyunca geçerlidir. Uygulamanın UI verilerini güncellemesi veya küçük miktarlar edinmesi gerektiğinde kullanın, böylece kullanıcı uygulama açar, böylece yeni bilgiler gösterir. Sistem uygulamayı başlatır.
- [FONT:0]BGTaskScheduler[[DÜT:1) – kayıt tanımlayıcıları kayıt eden merkezi yönetici, talepler ve görev başladığında ellerinize kontrol edin.
Her iki görev türü de benzer bir yaşam döngüsü paylaşır: kayıt, program, iş ve reschedule. Sistem tam olarak görevi yürütmek için karar verir; sadece 0:2 ile ipucu sağlayabilirsiniz.Bu tasarım kullanıcının cihaz kaynaklarına saygı duyar ve arka planda koşuşturmalarını engelleyebilir.
Plan Görevlerini Uygulamak - Bir Adım-Adım Rehberi
Arka görevleri iOS uygulamanıza entegre etmek için birkaç adım tamamlamanız gerekir: kapasitesi, görev tanımlayıcıları kaydetme, iş planlama, yürütmeyi yönetme ve bitişi yönetmenize izin vermek. Aşağıda, her aşamada beton kod örnekleri ile yürüyoruz.
1. Arka plan Modus Capability
Xcode'da, hedefinizin “Döntme:0)Signing & Cap tasks) sekmeye göre ve BGAppRefreshTask için hangi görevde kullanacağınıza bağlı olarak [Dön işleme[Dönetici: 9) ve BGGGGÜ için gerekli olan işlem için gerekli olan iş için gerekli olan iş için [FLT: 16)
2. Kayıt Görevi Identifiers
Her arka plan görevi, tipik olarak ters-DNS formatında (örneğin, [[DNST:3) benzersiz bir tanımlayıcı dizeye sahip olmalıdır.Bu tanımlayıcıları uygulama başlatıyor, örneğin inurFLT:4.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
BGTaskScheduler.shared.register(forTaskWithIdentifier: "com.example.myapp.refresh", using: nil) { task in
self.handleAppRefresh(task: task as! BGAppRefreshTask)
}
BGTaskScheduler.shared.register(forTaskWithIdentifier: "com.example.myapp.cleanup", using: nil) { task in
self.handleDatabaseCleanup(task: task as! BGProcessingTask)
}
return true
}
Kapanış görevi nesnesini yakalar; içeride kendi eller diyorsunuz. Görevi uygun beton türüne koymayı unutmayın.
3. Ders Plan Görevleri
İsteklerin ilanı, uygulamanın arka plana gittiğinde veya bir geri dönüş ihtiyacı olduğunda yapılmalıdır.TheurFLT:6) çalıştırılacak görev gibi ilk kez ipucunu verir, ancak sistem daha da geciktirebilir.
func scheduleAppRefresh() {
let request = BGAppRefreshTaskRequest(identifier: "com.example.myapp.refresh")
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60) // at least 15 minutes from now
do {
try BGTaskScheduler.shared.submit(request)
} catch {
print("Could not schedule app refresh: \(error.localizedDescription)")
}
}
func scheduleDatabaseCleanup() {
let request = BGProcessingTaskRequest(identifier: "com.example.myapp.cleanup")
request.earliestBeginDate = Date(timeIntervalSinceNow: 60 * 60) // at least 1 hour
request.requiresNetworkConnectivity = true // only run when network is available
request.requiresExternalPower = true // only run when device is charging
do {
try BGTaskScheduler.shared.submit(request)
} catch {
print("Could not schedule cleanup: \(error.localizedDescription)")
}
}
Bu zamanlama yöntemleri uygun yerlerde arayın: örneğin, başarılı bir arka plan görevinden sonra (bir sonraki çalıştırı tekrarlamak) veya kullanıcı uygulama askıya aldığında bunları kullanıcı eylemlerine yanıt olarak da çağırabilirsiniz.
4. Görevi Execution Execution
Sistem bir arka plan görevi yürütmeye karar verdiğinde, kayıtlı olduğunuz eller olarak adlandırılır: Eller içinde:
- Devam eden çalışmayı iptal eden bir sona erme eller ayarlayın ve görevi boş zaman tükendiğinde işaret eder.
- Gerçek çalışmayı (örneğin, ağ getir, veritabanı işlemleri).
- CallFLT:8 bir kez iş bittiği (veya başarısızlıktan sonra).
- Görevin bir sonraki aşamasını (kafasız görev bir çıkış olması amaçlanmıştır).
func handleAppRefresh(task: BGAppRefreshTask) {
// Reschedule the next refresh immediately.
scheduleAppRefresh()
// Set an expiration handler that will be called if the system needs to reclaim time.
task.expirationHandler = {
// Cancel any ongoing operations, clean up resources.
// Do NOT call setTaskCompleted here; the system will mark it as expired.
}
// Perform background work (e.g., fetch new data from server).
fetchLatestData { success in
// After the work completes (or errors), inform the scheduler.
task.setTaskCompleted(success: success)
}
}
Bir BGProcessingTask için, model aynı ama zaman bütçesi daha büyük. Ayrıca bir Core Data mağazası veya görüntüyü yeniden canlandıran daha ağır işlemleri gerçekleştirebilirsiniz.
5. Test Arka Görevleri
Arka plan görevleri test etmek için çok zor, çünkü sistem onları çalıştırdığında karar verir. Takip etmek için aşağıdaki teknikleri kullanın:
- Xcode debugger'i kullanın: Uygulamayı başlatın, sonra duraklayın ve [[ŞUYGÜNEŞMEYGÜNEŞİ DERSİNİZ veya “Simulate arka plan Fetch” menüsü seçeneği.
- BGProcessingTask için, kayıttan hemen sonra çağrıyı kullanın, sonra uygulamayı arka planda tutabilir. Sistem birkaç dakika içinde çalıştırabilir.
- Bir debug'daki yaklaşımda kullanılan USBT:12 kullanın: zamanlama loglarını tetiklemek için çağrılma ve yeniden yayınlayın.
- Ellerinizde mola noktaları ayarlayarak görev yürütmesi ve konsolu loglar için kontrol edin.
Robust arka plan görevi Uygulama için en iyi uygulamalar
Bu kılavuzların ardından uygulamanızın yanıtlanması, bataryayı korumak ve App Store incelemesini sağlayacaktır.
Tasarım Idempotent Görevler
Plan görevleri herhangi bir zamanda kesintiye uğrayabilir. İşinizin idempotent olduğunu emin olun - birden fazla kez çalıştırın aynı sonucu bir kez çalıştırın. Örneğin, ekleme veya dengeleme yerine tez mantığı kullanın.
Açıklamanın özetine saygı gösterin
Geçim eller, çalışmayı mükemmel bir şekilde durdurmanın son şansıdır. Hiçbir koşulda bunu görmezden gelmemelisiniz. Sistem güçleri sona ererse, tüm bitmemiş işler kaybolur.Eller, devam eden herhangi bir ağ görevi iptal eder, salıverme kilitleri ve bir sonraki çalıştırın yeniden başlayabilir.
Over-Schedule
Arka plan görevleri sadece içerik güncelleştirmelerine veya bakıma ihtiyacınız olduğunda. Her bir teslim, kitap tutma için sistem kaynakları kullanır. Over-scheduling uygulamanızı veya görevleri reddetmenize yol açabilir.BGAppRefreshTask için iyi bir kakavra her 15-30 dakikadır; BGProcessingTask günlük veya haftalık olarak çalıştırabilir.
Kolay olarak Constraints kullanın
BGProcessingTaskRequest, cihazın içine takıldığı kadar, bu sadece ağır CPU/IO çalışması için uygun olduğu sürece, ağ gereksinimini azaltacaktır - sistem daha fazla zamanlama esnekliğine sahip olacak ve daha erken çalıştırılabilir.
BGAppRefreshTask'ta Işık Tutun
Bu görevler, sonsuzluktan birkaç saniye önce duvar saatliğine sahiptir. Fetch sadece UI eyaletünüzü güncellemek için gerekli olan şey. veritabanı göçü veya büyük indirmeler gibi Heavier işlemleri BGProcessingTask'ta aittir.
Gerçek Cihazlarda Test
Simülatörü, farklı batarya, ağ ve şarj koşulları ile fiziksel bir cihazda tam olarak arka plan görevi planlama davranışını yeniden üretmiyor. Uygulamanızın pil hayatını nasıl etkilediğine göre Xcode Organizer'da Enerji Log'i kullanın.
Hatalar ve Re-schedule
Bir arka plan görevi başarısız olursa (örneğin, ağ hatası), daha sonra tekrar tekrar tekrar tekrar yürütmeniz gerekir. Üstel geri çekilme veya sabit bir yeniden deneme aralığı kullanın.Arayış olmadan KAYNAKLAR'ı aramayın, çünkü sistem tamamen yürütmeyi durdurabilir.
Ortak Pitfalls ve Sorun Gidering
İşte arka plan görevlerini uygulama ve onları nasıl çözmede karşılaşılan sık sorunlar.
Görev Asla Runs
Olası nedenler:
- Eksik kapasite - Bu arka plan modlarının etkinleştirildiğini doğrulama.
- Identifier yanlış bir maç - Info.plist veya inüFLT:18'de kullanılan dizeyi sağlayın.
- Görev yeniden ortaya çıkmamıştır – bir görev tamamlandıktan sonra (veya başarısız), gelecekte tekrar programlamanız gerekir.
- Sistem gecikmeleri – iOS, cihazın ağır yük altında olup olmadığını, düşük bataryada veya Low Power Mode'de gecikmeleri ertelemeyi ertelemek için arka plan yürütmeyi erebilir.
Debug'a göre, giriş yapın: setizeFLT:19) bir debug inşasında [[Dörtme ve yürütme ile ilgili mesajları gözlemleyin.
Görev Açıklamaları Sık sık
Göreviniz genellikle sona erme eller ulaşırsa, çalışmanızı daha küçük kıvrımlara ve ilerlemeye zorlayın.
Bellek Uyarıları veya Crashes
Plan görevleri, kısıtlı bir ortamda çalışır. Tümocate ve büyük nesneleri dikkatlice ele alır. Birçok geçici nesne oluşturan döngüler için otomatik sürüm havuzları kullanın.Eğer uygulama çökerse, düşük not için kaza loglarını kontrol edin. ThinkFLT:21.
Gelişmiş Teknikler ve Gerçek Dünya
Arka çalışma ile karşılaştırıldığında, diğer iOS özellikleri ile arka plan görevleri birleştirin.For apps that need to denge sensitiveness with background work, consider the background tasks with other iOS features.
Push Bildirims ile Arka Plan Görevlerini Kombine Etmek
Zamana duyarlı güncellemeler için, uzaktan bildirimleri en iyi şekilde kullanın.Bu, kısa bir yürütme penceresi için arka planda (BGAppRefreshTask) ile birlikte, plan görevlerine saygı duyan yeni yaklaşımlar sağlar.
BulutKit veya Core Data ile senkronizasyon
BulutKit ile arka plan senkronize edildiğinde, BGAppRefreshTask ile birlikte arka plan ayarlama yöntemlerini kullanın.For Core Data, bu arka plandaki ithalat, özel bir arka plan bağlamında her zaman yazmıyor.
Görev Performansı İzleme
Xcode'da (Window > Organizer > Crashes & Energy > Uygulama > açık Enerji Log) her görevin tipik bütçesinin altında nasıl çalıştığını görmek için, zamanlarını ve etkisini görmek için.
Dış Referanslar
Daha derin çalışma için, bu yazara dayalı kaynaklara danışın:
- [0] Apple Documentation: PlanTasks).
- [0]WWWDC 2019: App Arka planda İlerlemeler ).
- [0] Apple Guide: Arka plan yürütme (Legacy)).
- [FONT:0)Raywenderlich: Arka Modes mph[DÜT:1).
- [FONT:0) Enerji Verimliliğini Geliştirmek için Arka Plan Yürütmesi).
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Arka plan görevleri ile uygulama:0)BGTaskScheduler[Döneticileri 1 ) ve [[Döneticileri:2)BGProcessingTask) / uygulama sıralaması|tasarımsal olarak, uygulamanızın ölçeklendirme işlemine devam ederken, uygulamanızın fiziksel performansınızı ve performansınızı iyileştirmenize olanak sağlar.