【问题标题】:Run func() in background iOS app, not queued?在后台 iOS 应用程序中运行 func(),而不是排队?
【发布时间】:2017-04-20 03:22:02
【问题描述】:

我正在为用户使用 Alamofire 请求方法live(),但他们至少需要 1 小时的下载时间。

我想在后台运行该方法。

但不是返回应用程序后恢复的队列,而是在后台工作。

有没有办法使用任何库或框架在后台运行该方法?

【问题讨论】:

标签: ios swift alamofire


【解决方案1】:

系统类 URLSession 具有从后台下载文件的能力。这可能是下载文件的最简洁方式。当您为后台下载创建 URLSession 时,系统会在下载完成时通知您,即使它必须重新启动您的应用才能这样做。

您应该可以搜索“URLSession 后台下载任务”以了解更多信息。步骤很多,网上也有不少教程解释怎么做。

我不知道 AlamoFire 是否公开了这个能力。

编辑:

看来AlamoFire确实支持后台下载。请参阅此链接:

AlamoFire Download in Background Session

【讨论】:

  • 是的,但我正在检索 JSON 对象,而不是大文件。但是数量很大。
  • 我建议将您的 JSON 数据下载到一个文件中,以便您可以利用 NSURLSession 的后台下载特性。
【解决方案2】:

有一种方法可以让应用程序在后台永久运行,那就是从CoreLocation 调用requestLocationUpdates(),但为此您需要用户对Always Location 的许可,而且您还会消耗相当多的电池电量.除此之外没有任何我知道的方法。

【讨论】:

  • 好的,我可以在 requestLocationUpdates() 中执行任何 func() 吗? '考虑到权限授予没有问题! '
  • 您只需在代码中的任何位置调用requestLocationUpdates(),您的应用就会开始在后台永远运行。你可以在某个线程上调用你的下载函数而忘记它。
  • 未解析的标识符,我认为 Swift 3 中的语法发生了变化?!
  • 这是一个糟糕的建议,因为应用程序没有使用核心位置来达到预期目的,Apple 将拒绝该应用程序。
  • 我正要发表“这是个糟糕的建议”的评论,但 rmaddy 打败了我。 Apple 确实会拒绝以这种方式配置的应用程序,如果他们不这样做,这种方法会迅速耗尽用户的电池。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 2015-04-25
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多