Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
swift/ios在后台刷新应用程序数据_Ios_Swift_Background_Background Process - Fatal编程技术网

swift/ios在后台刷新应用程序数据

swift/ios在后台刷新应用程序数据,ios,swift,background,background-process,Ios,Swift,Background,Background Process,我正在编写一个iOS/Swift应用程序,它每X分钟从REST服务读取一次数据,并相应地更新UI 现在,我希望当应用程序放在后台时,每隔X分钟调用一个任务,从REST服务读取数据,如果刚刚读取的数据满足给定条件,则显示一个通知,提示用户将应用程序带回前台 在我的搜索中,我了解到在applicationidenterbackground事件期间,我应该使用beginbackgroundtaskhirationhandler启动任务 问题是,如果我理解正确,如果任务没有使用endBackground

我正在编写一个iOS/Swift应用程序,它每X分钟从REST服务读取一次数据,并相应地更新UI

现在,我希望当应用程序放在后台时,每隔X分钟调用一个任务,从REST服务读取数据,如果刚刚读取的数据满足给定条件,则显示一个通知,提示用户将应用程序带回前台

在我的搜索中,我了解到在
applicationidenterbackground
事件期间,我应该使用
beginbackgroundtaskhirationhandler
启动任务

问题是,如果我理解正确,如果任务没有使用
endBackgroundUpdateTask
停止,那么这允许最多10/15分钟的时间,然后应用程序终止,而我希望任务无限期地轮询服务(至少直到用户从应用程序的设置中禁用它)

我的问题是: 这种功能是如何正常执行的?是否存在解决此类问题的常见解决方案或最佳实践

  • 如果您的条件得到满足,您可以使用可以从后台显示的本地通知

  • 正确,iOS最终将关闭后台进程,您无法强制执行连续的后台活动。使用
    backgroundTimeRemaining
    属性检查您的应用程序还剩多少时间,并通过调用
    endBackgroundTask
    尽可能优雅地处理它,以便iOS不会强制终止您的应用程序


  • 作为一个解决方案,您可以考虑将远程通知与
    内容一起使用:YES
    ,它运行查看Parse.com。它们的本地数据存储是您试图实现的内容的抽象。
    顺便问一下,真的需要在后台刷新吗。如果通话速度相对较快,则在用户打开应用程序之前无需刷新。像这样的后台过程,当用户不使用Wifi时,使用网络可能会消耗大量电池。所以仔细考虑用例! 使用iOS后台提取功能,您可以指定最小后台提取间隔。但连续调用代码之间的实际间隔将由iOS框架确定。有关详细信息,请查看此链接:


    我在我的应用程序中使用这种方法,我认为这是一种首选方法。

    谢谢您的回复。远程通知是指推送通知,对吗?问题是,如果我没有错的话,为了实现这些,我应该能够在服务器端进行更改,而我正在寻找一个更轻量级的解决方案,只允许无限期地继续分配给后台任务的时间。例如,我正在研究是否可以让任务运行1分钟,然后终止任务并立即运行一个新任务,但我不知道这是否可行/允许。非常感谢,这似乎正好解决了我遇到的问题,即使我的屏幕上显示,下一步也需要几分钟“performFetchWithCompletionHandler”(每次我都返回.newData),这太糟糕了。