Sobes.tech
Middle

Uygulamanın arka planda çalışmaya devam etmesini nasıl sağlarım?

sobes.tech yapay zeka

AI'dan gelen yanıt

Arka planda uygulamanın çalışmasını sağlamak için, görev türüne bağlı olarak çeşitli iOS mekanizmaları kullanılır:

  • Arka Plan Modları: Belirli işlemleri arka planda gerçekleştirmeye izin veren önceden tanımlanmış sistem modlarıdır. En yaygın olanlar:

    • audio: Ses çalma veya kaydetme.
    • location: Konum takibi.
    • voip: VoIP kullanımı.
    • fetch: Yeni içeriklerin düzenli olarak indirilmesi.
    • processing: Kaynak yoğun görevlerin yürütülmesi.
    • remote-notification: Push bildirimlerinin işlenmesi.

    Arka plan modlarını etkinleştirmek için, ilgili anahtarları Info.plist dosyasına ekmek veya Xcode'da Capabilities kullanmak gerekir.

  • Arka Plan Görevi: Uygulama arka plana geçtiğinde, mevcut görevi tamamlamak için sınırlı bir süre sağlar.

    var backgroundTask: UIBackgroundTaskIdentifier = .invalid
    
    func registerBackgroundTask() {
        backgroundTask = UIApplication.shared.beginBackgroundTask {
            // Süre sonu yönetimi
            self.endBackgroundTask()
        }
        // Arka plan görevi yürütülüyor
        // ...
    }
    
    func endBackgroundTask() {
        UIApplication.shared.endBackgroundTask(backgroundTask)
        backgroundTask = .invalid
    }
    
  • Arka Plan Fetch: Sistem, yeni içerikleri kontrol etmek ve indirmek için uygulamayı periyodik olarak arka planda başlatabilir.

    // AppDelegate'de, didFinishLaunchingWithOptions içinde
    UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
    
    // didFinishLaunchingWithOptions veya ayrı bir yöntemde
    func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        // Asenkron veri yükleme işlemi
        // Tamamlandığında, completionHandler'ı uygun sonuçla çağırın:
        // .newData, .noData, .failed
        completionHandler(.newData)
    }
    
  • Arka Plan İşleme: Zaman alabilecek kaynak yoğun görevleri yürütmek için tasarlanmıştır. BGTaskScheduler ile kullanılır.

    import BackgroundTasks
    
    let taskID = "com.yourapp.mytask"
    
    func registerBackgroundTasks() {
        BGTaskScheduler.shared.register(forTaskWithIdentifier: taskID) { task in
            // Görevi yürüt
            self.handleBackgroundTask(task: task as! BGProcessingTask)
        }
    }
    
    func handleBackgroundTask(task: BGProcessingTask) {
        // Uzun süren görevi yürüt
        // Görevi tamamlandığını işaretle
        task.setTaskCompleted(success: true)
    }
    
    // Görevi planla
    func scheduleBackgroundProcessingTask() {
        let request = BGProcessingTaskRequest(identifier: taskID)
        // Çalışma ortamı gereksinimlerini yapılandır (örneğin, ağ bağlantısı, pil durumu)
        request.requiresNetworkConnectivity = true
    
        do {
            try BGTaskScheduler.shared.submit(request)
        } catch {
            print("Görev planlanamadı: \(error)")
        }
    }
    
  • Push Bildirimleri: Sessiz push'ler, uygulamayı arka planda etkinleştirmek ve yeni içerik yüklemek için kullanılabilir.

  • Work Manager (Android) iOS karşılığı (dolaylı): BGTaskScheduler, sistem kaynakları ve kısıtlamaları göz önünde bulundurarak arka plan görevlerini planlamaya olanak tanıyan Android Work Manager'ın karşılığıdır.

Hangi mekanizmanın kullanılacağı, arka planda gerçekleştirilmesi gereken görevin türüne bağlıdır. Uygun olmayan bir mekanizmanın kullanılması, uygulamanın App Store incelemesinde reddedilmesine ve sistem tarafından arka plan süreçlerinin hızla sonlandırılmasına neden olabilir. Ayrıca, sistem kaynaklarına saygılı olmak önemlidir: pil, bellek ve CPU.