0

即使应用程序在后台,我的应用程序也希望每 5 秒更新一次有关用户位置的服务器。我为它实现了后台提取。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {        
        application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil))

        application.setMinimumBackgroundFetchInterval(5.0)

        return true
    }

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

    completionHandler(UIBackgroundFetchResult.NewData)
    UpdateData()
}

func UpdateData(){
     print("UpdateData executes")
    // function to update data when ever this method triggers
}

但问题是

  1. 我无法进入performFetchWithCompletionHandler方法,除非我单击Debug>simulate background fetch
  2. 如何实现每 5 秒后调用performFetchWithCompletionHandler 。
4

1 回答 1

5

您对什么是后台提取存在误解。开发人员无法控制何时准确执行后台提取。iOS 自己决定何时允许应用程序执行后台获取。

setMinimumBackgroundFetchInterval函数仅允许您指定必须在后台提取之间传递的最小时间间隔,以最大限度地减少应用程序的能源和数据使用量。但是,您在此处设置的时间间隔并不能保证您的应用程序能够频繁地执行后台获取。文档中与此相关的关键语句是“在后台随机获取内容...... ” 。

目前,确保您的应用程序可以在后台执行某些功能(包括从服务器获取数据)的唯一方法是定期从您自己的服务器发送静默推送通知。但是,即使这样,如果您的应用程序需要很长时间才能完成执行以响应推送,或者您的应用程序收到太多通知,系统可能会决定不唤醒您的应用程序以响应静默推送通知。

于 2018-05-16T16:27:17.687 回答