【问题标题】:iOS background fetchiOS后台获取
【发布时间】:2015-01-10 14:35:06
【问题描述】:

我对后台获取有点困惑。我在 Apple Developer 文档中读到,当操作系统决定应该获取时,用户无法控制后台获取,而 Apple 员工在 Apple Developer 论坛帖子中说如果用户杀死应用程序(双击主页和按钮向上滑动)背景提取不会发生,在这种情况下用户可以控制后台提取。所以有人可以向我澄清一下,如果用户使用任务管理器杀死应用程序,后台获取仍然会在后台继续进行,或者它与应用程序同时被杀死。

Apple 文档:

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html#//apple_ref/doc/uid/TP40007072-CH4-SW1

【问题讨论】:

    标签: ios background-fetch


    【解决方案1】:

    来自您链接的文档:

    当一个好的机会出现时,系统会唤醒或启动您的应用到后台并调用应用委托的 application:performFetchWithCompletionHandler: 方法。

    因此,系统似乎能够在后台启动未运行的应用程序,因此它执行后台提取。但另一方面,您可以在文档的后面部分阅读:

    在大多数情况下,系统不会在用户强制退出后重新启动应用程序。一个例外是定位应用程序,它在 iOS 8 及更高版本中在被用户强制退出后会重新启动。但在其他情况下,用户必须明确启动应用程序或重新启动设备,然后系统才能将应用程序自动启动到后台。

    所以,Apple 的工程师是对的:强制退出应用程序会将其置于一种不再允许后台提取的特殊情况。

    【讨论】:

    • 这真是太愚蠢了,那么当应用程序在后台(被用户杀死)时,没有办法发送本地通知?我不敢相信苹果做到了这一点......
    • @user4191892 你说,“当应用程序在后台时(被用户杀死)......”为了澄清,用户杀死它后应用程序不是“在后台”;它被终止。从开发人员的角度来看,我可以理解为什么你会觉得这个功能很烦人,但从 iOS 设备用户的角度来看,这实际上是一个很好的功能。例如,某个应用程序正在做一些我觉得很烦人的事情,以至于我不得不离开该应用程序,而且实际上还要通过额外的步骤来明确地杀死它:如果它立即发生,我不会高兴弹回来。
    • 是的,我同意你的看法
    【解决方案2】:

    如果用户觉得需要允许后台操作,他不会终止应用。但是当他杀死它时,只适合禁止后台获取。用户只能通过允许后台获取/终止应用程序来控制是否应该进行后台获取。但是一旦应用程序处于后台,用户就无法控制“何时”后台获取发生。操作系统根据它的免费程度来确定它。

    【讨论】:

      【解决方案3】:

      我认为这句话(来自链接文档)对于您所描述的场景来说是最重要的:

      配置完成后,您的 NSURLSession 对象会在适当的时间无缝地将上传和下载任务交给系统。如果任务在您的应用程序仍在运行时完成(在前台或后台),会话对象会以通常的方式通知其委托。如果任务尚未完成且系统终止您的应用程序,系统会自动继续在后台管理任务。如果用户终止您的应用,系统会取消所有待处理的任务。

      【讨论】:

      • @Rob 看最后一句话。 “如果用户终止了您的应用,系统将取消所有待处理的任务。”
      • 非常好。我不确定我是否会将关于待处理NSURLSession 后台任务的这句话推断为当前对后台获取的讨论,但我现在明白你的意思了。感谢您的澄清。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 2013-12-30
      相关资源
      最近更新 更多